← Rust コース
30. From と Into — 型の変換とエラーの自動変換
From は「ある型から別の型を作る」変換を定義するトレイトです。impl From<A> for B と書いて from 関数を実装すると、B::from(a) で A から B を作れます。From を実装すると、対になる Into(a.into() で B を得る)も自動で使えるようになります。型と型の橋渡しを標準化する仕組みです。
エラー処理でこれが重要なのは、? 演算子が「エラー型の自動変換」に From を使うからです。関数の戻り値が Result<_, MyError> のとき、途中で別のエラー型 E が ? で投げられても、impl From<E> for MyError があれば自動的に MyError へ変換されます。おかげで、いろいろな原因のエラーを1つの自前エラー型にまとめて扱えます。
下のコードは、文字列をパースする標準のエラーを、自前の AppError へ From で変換できるようにした例です。これにより parse の結果に ? を付けるだけで、エラーが AppError に変換されて返ります。実務のエラー設計では、この「各種エラーを自前の型に集約する」パターンが基本になります。
▶ サンプルコードを実行してみよう(自由に書き換えてOK)
Rust