Intoトレイトは、自分のインスタンスを異なる型へ変換する為のintoメソッドを定義しているトレイト。
Intoトレイトはstd::preludeに含まれているので、useしなくても使える。
「異なる型への変換」なので、intoメソッドを呼び出すと、元のインスタンスは(所有権を奪われて)使用できなくなる。
なお、Fromトレイトを実装すると、相手の型に対して自動的にIntoトレイトが実装される。
引数の型ごとにintoメソッドを用意する。
pub trait Into<T>: Sized {
    fn into(self) -> T;
}
intoメソッドの引数はselfなので(&self(参照)ではないので)所有権を奪うことに注意。
struct MyStruct {
    value: i32,
}
impl Into<i32> for MyStruct {
    fn into(self) -> i32 {
        self.value
    }
}
impl Into<i64> for MyStruct {
    fn into(self) -> i64 {
        self.value as i64
    }
}
// 呼び出す例
    let s = MyStruct { value: 123 };
    let n: i32 = s.into();
代入先の変数の型に応じて、合致するメソッドが呼ばれる。
合致する型が無いときはコンパイルエラーになる。
(Javaではメソッドの戻り型のみが異なるオーバーロード(同名のメソッドを複数定義すること)は出来ないので、代入先の型に応じて呼び出すメソッドを変えることは出来ない)