From と Into

FromIntoは関連性のある型です。

From

From<T>は、struct Uに対して実装するとUTへ変換できるようになります。例えばStringが持つ::fromによってStringな値を作るのは親しみのある例です。これはimpl<'_> From<&'_ str> for Stringのように定義されています。

String::from("str");

上記は、結果どうなるかさえ分かれば以下のようにも書き換えられます。

let _s: String = From::from("str");

Into

From<T>が実装される時、自動でInto<U>が実装されます。

impl<T, U> Into<U> for T
where
  U: From<T>, 

これは少し分かりづらいのでT&'_ strに置き換えてみます。

impl<'_> Into<From<&'_ str>> for &'_ str  

これは「&'_ strからFrom<&'_ str>を実装してる型に変換できるよ」という意味になります。

&strに対して::intoを呼んでみます。

let _s: String = "str".into();

その時メソッドの中はこのような形で実行されます。

let _s: String = From::<&str>::from("str");

上記で見たようにimpl<'_> From<&'_ str> for Stringが実装されてるのでStringへ変換されます。