В документе From trait написано
Примечание: эта черта не должна терпеть неудачу. Если преобразование может завершиться неудачно, используйте TryFrom.
Поскольку вы не будете знать, может ли usize содержать значение u16 / u32 / u64 / u128 (в зависимости от цели компиляции), все эти примитивные типы реализуют TryFrom вместо From.
В документе Rust implies
означает, что когда у вас есть тип, реализует From
, компилятор бесплатно выдаст вам Into
(обратите внимание, что обратное неправда). Та же идея применима к TryFrom
и TryInto
. Таким образом, следующий код будет работать должным образом.
use std::convert::{TryFrom,TryInto};
fn main() {
let size: usize = 42;
let good: u128 = u128::try_from(size).unwrap();
let doublegood:usize = good.try_into().unwrap();
}