Expand description
Simple and safe type conversions that may fail in a controlled
way under some circumstances. It is the reciprocal of TryInto.
This is useful when you are doing a type conversion that may
trivially succeed but may also need special handling.
For example, there is no way to convert an i64 into an i32
using the From trait, because an i64 may contain a value
that an i32 cannot represent and so the conversion would lose data.
This might be handled by truncating the i64 to an i32 (essentially
giving the i64’s value modulo i32::MAX) or by simply returning
i32::MAX, or by some other method. The From trait is intended
for perfect conversions, so the TryFrom trait informs the
programmer when a type conversion could go bad and lets them
decide how to handle it.
TryFrom<T> for U implies TryInto<U> for T
try_from is reflexive, which means that TryFrom<T> for T
is implemented and cannot fail – the associated Error type for
calling T::try_from() on a value of type T is Infallible.
When the ! type is stabilized Infallible and ! will be
equivalent.
TryFrom<T> can be implemented as follows:
use std::convert::TryFrom;
struct GreaterThanZero(i32);
impl TryFrom<i32> for GreaterThanZero {
type Error = &'static str;
fn try_from(value: i32) -> Result<Self, Self::Error> {
if value <= 0 {
Err("GreaterThanZero only accepts value superior than zero!")
} else {
Ok(GreaterThanZero(value))
}
}
}Run
As described, i32 implements TryFrom<i64>:
use std::convert::TryFrom;
let big_number = 1_000_000_000_000i64;
let smaller_number = big_number as i32;
assert_eq!(smaller_number, -727379968);
let try_smaller_number = i32::try_from(big_number);
assert!(try_smaller_number.is_err());
let try_successful_smaller_number = i32::try_from(3);
assert!(try_successful_smaller_number.is_ok());
Run
The type returned in the event of a conversion error.
Attempts to convert NonZeroI8 to NonZeroU8.
Attempts to convert NonZeroI8 to NonZeroU16.
Attempts to convert NonZeroI8 to NonZeroU32.
Attempts to convert NonZeroI8 to NonZeroU64.
Attempts to convert NonZeroI8 to NonZeroU128.
Attempts to convert NonZeroI8 to NonZeroUsize.
Attempts to convert NonZeroI16 to NonZeroI8.
Attempts to convert NonZeroI16 to NonZeroU8.
Attempts to convert NonZeroI16 to NonZeroU16.
Attempts to convert NonZeroI16 to NonZeroU32.
Attempts to convert NonZeroI16 to NonZeroU64.
Attempts to convert NonZeroI16 to NonZeroU128.
Attempts to convert NonZeroI16 to NonZeroUsize.
Attempts to convert NonZeroI32 to NonZeroI8.
Attempts to convert NonZeroI32 to NonZeroI16.
Attempts to convert NonZeroI32 to NonZeroIsize.
Attempts to convert NonZeroI32 to NonZeroU8.
Attempts to convert NonZeroI32 to NonZeroU16.
Attempts to convert NonZeroI32 to NonZeroU32.
Attempts to convert NonZeroI32 to NonZeroU64.
Attempts to convert NonZeroI32 to NonZeroU128.
Attempts to convert NonZeroI32 to NonZeroUsize.
Attempts to convert NonZeroI64 to NonZeroI8.
Attempts to convert NonZeroI64 to NonZeroI16.
Attempts to convert NonZeroI64 to NonZeroI32.
Attempts to convert NonZeroI64 to NonZeroIsize.
Attempts to convert NonZeroI64 to NonZeroU8.
Attempts to convert NonZeroI64 to NonZeroU16.
Attempts to convert NonZeroI64 to NonZeroU32.
Attempts to convert NonZeroI64 to NonZeroU64.
Attempts to convert NonZeroI64 to NonZeroU128.
Attempts to convert NonZeroI64 to NonZeroUsize.
Attempts to convert NonZeroI128 to NonZeroI8.
Attempts to convert NonZeroI128 to NonZeroI16.
Attempts to convert NonZeroI128 to NonZeroI32.
Attempts to convert NonZeroI128 to NonZeroI64.
Attempts to convert NonZeroI128 to NonZeroIsize.
Attempts to convert NonZeroI128 to NonZeroU8.
Attempts to convert NonZeroI128 to NonZeroU16.
Attempts to convert NonZeroI128 to NonZeroU32.
Attempts to convert NonZeroI128 to NonZeroU64.
Attempts to convert NonZeroI128 to NonZeroU128.
Attempts to convert NonZeroI128 to NonZeroUsize.
Attempts to convert NonZeroIsize to NonZeroI8.
Attempts to convert NonZeroIsize to NonZeroI16.
Attempts to convert NonZeroIsize to NonZeroI32.
Attempts to convert NonZeroIsize to NonZeroI64.
Attempts to convert NonZeroIsize to NonZeroI128.
Attempts to convert NonZeroIsize to NonZeroU8.
Attempts to convert NonZeroIsize to NonZeroU16.
Attempts to convert NonZeroIsize to NonZeroU32.
Attempts to convert NonZeroIsize to NonZeroU64.
Attempts to convert NonZeroIsize to NonZeroU128.
Attempts to convert NonZeroIsize to NonZeroUsize.
Attempts to convert NonZeroU8 to NonZeroI8.
Attempts to convert NonZeroU16 to NonZeroI8.
Attempts to convert NonZeroU16 to NonZeroI16.
Attempts to convert NonZeroU16 to NonZeroIsize.
Attempts to convert NonZeroU16 to NonZeroU8.
Attempts to convert NonZeroU32 to NonZeroI8.
Attempts to convert NonZeroU32 to NonZeroI16.
Attempts to convert NonZeroU32 to NonZeroI32.
Attempts to convert NonZeroU32 to NonZeroIsize.
Attempts to convert NonZeroU32 to NonZeroU8.
Attempts to convert NonZeroU32 to NonZeroU16.
Attempts to convert NonZeroU32 to NonZeroUsize.
Attempts to convert NonZeroU64 to NonZeroI8.
Attempts to convert NonZeroU64 to NonZeroI16.
Attempts to convert NonZeroU64 to NonZeroI32.
Attempts to convert NonZeroU64 to NonZeroI64.
Attempts to convert NonZeroU64 to NonZeroIsize.
Attempts to convert NonZeroU64 to NonZeroU8.
Attempts to convert NonZeroU64 to NonZeroU16.
Attempts to convert NonZeroU64 to NonZeroU32.
Attempts to convert NonZeroU64 to NonZeroUsize.
Attempts to convert NonZeroU128 to NonZeroI8.
Attempts to convert NonZeroU128 to NonZeroI16.
Attempts to convert NonZeroU128 to NonZeroI32.
Attempts to convert NonZeroU128 to NonZeroI64.
Attempts to convert NonZeroU128 to NonZeroI128.
Attempts to convert NonZeroU128 to NonZeroIsize.
Attempts to convert NonZeroU128 to NonZeroU8.
Attempts to convert NonZeroU128 to NonZeroU16.
Attempts to convert NonZeroU128 to NonZeroU32.
Attempts to convert NonZeroU128 to NonZeroU64.
Attempts to convert NonZeroU128 to NonZeroUsize.
Attempts to convert NonZeroUsize to NonZeroI8.
Attempts to convert NonZeroUsize to NonZeroI16.
Attempts to convert NonZeroUsize to NonZeroI32.
Attempts to convert NonZeroUsize to NonZeroI64.
Attempts to convert NonZeroUsize to NonZeroI128.
Attempts to convert NonZeroUsize to NonZeroIsize.
Attempts to convert NonZeroUsize to NonZeroU8.
Attempts to convert NonZeroUsize to NonZeroU16.
Attempts to convert NonZeroUsize to NonZeroU32.
Attempts to convert NonZeroUsize to NonZeroU64.
Attempts to convert NonZeroUsize to NonZeroU128.
Attempts to convert i8 to NonZeroI8.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Attempts to convert i16 to NonZeroI16.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Attempts to convert i32 to NonZeroI32.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Attempts to convert i64 to NonZeroI64.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Attempts to convert i128 to NonZeroI128.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Attempts to convert isize to NonZeroIsize.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Attempts to convert u8 to NonZeroU8.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Attempts to convert u16 to NonZeroU16.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Attempts to convert u32 to NonZeroU32.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Attempts to convert u64 to NonZeroU64.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Attempts to convert u128 to NonZeroU128.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Attempts to convert usize to NonZeroUsize.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
Try to create the target number type from a source
number type. This returns an error if the source value
is outside of the range of the target type.
impl<'a, T, const N: usize> TryFrom<&'a [T]> for &'a [T; N]
[src]
impl<'a, T, const N: usize> TryFrom<&'a mut [T]> for &'a mut [T; N]
[src]