TryFrom and TryInto
In the previous chapter we looked at the From and Into traits,
Rust's idiomatic interfaces for infallible type conversions.
But what if the conversion is not guaranteed to succeed?
We now know enough about errors to discuss the fallible counterparts of From and Into:
TryFrom and TryInto.
TryFrom and TryInto
Both TryFrom and TryInto are defined in the std::convert module, just like From and Into.
pub trait TryFrom<T>: Sized {
type Error;
fn try_from(value: T) -> Result<Self, Self::Error>;
}
pub trait TryInto<T>: Sized {
type Error;
fn try_into(self) -> Result<T, Self::Error>;
}
The main difference between From/Into and TryFrom/TryInto is that the latter return a Result type.
This allows the conversion to fail, returning an error instead of panicking.
Self::Error
Both TryFrom and TryInto have an associated Error type.
This allows each implementation to specify its own error type, ideally the most appropriate for the conversion
being attempted.
Self::Error is a way to refer to the Error associated type defined in the trait itself.
Duality
Just like From and Into, TryFrom and TryInto are dual traits.
If you implement TryFrom for a type, you get TryInto for free.
Exercise
The exercise for this section is located in 05_ticket_v2/13_try_from