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
.
#![allow(unused)] fn main() { 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