TryFrom и TryInto

Как и From и Into, TryFrom и TryInto - обобщённые типажи для конвертации между типами. Но в отличии от From/Into, типажи TryFrom/TryInto используются для преобразований с ошибками и возвращают Result.

use std::convert::TryFrom;

use std::convert::TryInto;


#[derive(Debug, PartialEq)]

struct EvenNumber(i32);


impl TryFrom for EvenNumber {

type Error = ();


fn try_from(value: i32) -> Result {

if value % 2 == 0 {

Ok(EvenNumber(value))

} else {

Err(())

}

}

}


fn main() {

// TryFrom


assert_eq!(EvenNumber::try_from(8), Ok(EvenNumber(8)));

assert_eq!(EvenNumber::try_from(5), Err(()));


// TryInto


let result: Result = 8i32.try_into();

assert_eq!(result, Ok(EvenNumber(8)));

let result: Result = 5i32.try_into();

assert_eq!(result, Err(()));

}

Загрузка...