メモ:二流のプログラマのためのRust
- &'a strではなく- Stringを使う
- &'a [T]ではなく- Vec<T>を使う
- 流れるように自然に .clone()する “早く何度もcloneせよ”
- ただしコンパイラがライフタイムエラーを出さないかぎりにおいて参照を使ってもいい
- enum/structには #[derive(Clone, Debug, Default)]をつけておく
- enumのデフォルト値には #[default]をつけておく
- 関数から参照を返すのは罪、structのメソッドから参照を返すのはだいたいOK
- 引数に Stringと&strの両方を渡せるようにするため、- 関数の引数は s: impl AsRef<str>とし、s.as_ref()で使う
- 構造体の new メソッドは s: impl Into<String>とし、s.into()で owned String にする
 
- 関数の引数は 
- 常に独自の Error enum を定義する
- thiserror マクロを使い Error enumを作る
- エラーの constructor は thiserror_ext::Constructで定義する
- Rustの標準ライブラリが返すエラーを独自エラーに変換するため、 thiserror の #[from]マクロを使う
- Result<T>を返す関数はすべて ? を付けるだけ