Fromトレイトは、異なる型から自分のインスタンスを生成する為のfromメソッドを定義しているトレイト。
Fromトレイトはstd::preludeに含まれているので、useしなくても使える。
また、Fromトレイトを実装すると、相手の型に対して自動的にIntoトレイトが実装される。
引数の型ごとにfromメソッドを用意する。
pub trait From<T>: Sized {
    fn from(value: T) -> Self;
}
struct MyStruct {
    value: i32,
}
impl From<i32> for MyStruct {
    fn from(value: i32) -> Self {
        MyStruct { value }
    }
}
impl From<i64> for MyStruct {
    fn from(value: i64) -> Self {
        MyStruct {
            value: value as i32,
        }
    }
}
// 呼び出す例
    let s = MyStruct::from(123);
    let s = MyStruct::from(123_i64);
×  let s = MyStruct::from(123_f32); // 合致する型が無いのでコンパイルエラー
    println!("s.value={}", s.value);
呼び出す側の引数の型に応じて、合致するメソッドが呼ばれる。
合致する型が無いときはコンパイルエラーになる。
Fromトレイトを実装すると、相手の型に対して自動的にIntoトレイトが実装される。
    let s: MyStruct = 123.into();	// intoメソッドはIntoトレイトから来たメソッド
    let s: MyStruct = 123_i64.into();	
Fromトレイトの型引数で指定した型のインスタンスで、intoメソッドが使用できる。