pub trait TryFrom<T>: Sized {
type Error;
// Required method
fn try_from(value: T) -> Result<Self, Self::Error>;
}
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
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.
§Generic Implementations
TryFrom<T> for U
impliesTryInto
<U> for T
try_from
is reflexive, which means thatTryFrom<T> for T
is implemented and cannot fail – the associatedError
type for callingT::try_from()
on a value of typeT
isInfallible
. When the!
type is stabilizedInfallible
and!
will be equivalent.
TryFrom<T>
can be implemented as follows:
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 values greater than zero!")
} else {
Ok(GreaterThanZero(value))
}
}
}
§Examples
As described, i32
implements TryFrom<
i64
>
:
let big_number = 1_000_000_000_000i64;
// Silently truncates `big_number`, requires detecting
// and handling the truncation after the fact.
let smaller_number = big_number as i32;
assert_eq!(smaller_number, -727379968);
// Returns an error because `big_number` is too big to
// fit in an `i32`.
let try_smaller_number = i32::try_from(big_number);
assert!(try_smaller_number.is_err());
// Returns `Ok(3)`.
let try_successful_smaller_number = i32::try_from(3);
assert!(try_successful_smaller_number.is_ok());
Required Associated Types§
Required Methods§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementors§
Source§impl TryFrom<&SubstateKey> for AuthZoneField
impl TryFrom<&SubstateKey> for AuthZoneField
Source§impl TryFrom<&SubstateKey> for BootLoaderField
impl TryFrom<&SubstateKey> for BootLoaderField
Source§impl TryFrom<&SubstateKey> for ComponentField
impl TryFrom<&SubstateKey> for ComponentField
Source§impl TryFrom<&SubstateKey> for FungibleBucketField
impl TryFrom<&SubstateKey> for FungibleBucketField
Source§impl TryFrom<&SubstateKey> for FungibleProofField
impl TryFrom<&SubstateKey> for FungibleProofField
Source§impl TryFrom<&SubstateKey> for NonFungibleBucketField
impl TryFrom<&SubstateKey> for NonFungibleBucketField
Source§impl TryFrom<&SubstateKey> for NonFungibleProofField
impl TryFrom<&SubstateKey> for NonFungibleProofField
Source§impl TryFrom<&SubstateKey> for ProtocolUpdateStatusField
impl TryFrom<&SubstateKey> for ProtocolUpdateStatusField
Source§impl TryFrom<&SubstateKey> for RoyaltyField
impl TryFrom<&SubstateKey> for RoyaltyField
Source§impl TryFrom<&SubstateKey> for TransactionTrackerField
impl TryFrom<&SubstateKey> for TransactionTrackerField
Source§impl TryFrom<&SubstateKey> for TypeInfoField
impl TryFrom<&SubstateKey> for TypeInfoField
Source§impl TryFrom<&SubstateKey> for WorktopField
impl TryFrom<&SubstateKey> for WorktopField
Source§impl TryFrom<&str> for PreciseDecimal
impl TryFrom<&str> for PreciseDecimal
Source§impl TryFrom<&str> for StringNonFungibleLocalId
impl TryFrom<&str> for StringNonFungibleLocalId
Source§impl TryFrom<&PreciseDecimal> for i8
impl TryFrom<&PreciseDecimal> for i8
Source§impl TryFrom<&PreciseDecimal> for i16
impl TryFrom<&PreciseDecimal> for i16
Source§impl TryFrom<&PreciseDecimal> for i32
impl TryFrom<&PreciseDecimal> for i32
Source§impl TryFrom<&PreciseDecimal> for i64
impl TryFrom<&PreciseDecimal> for i64
Source§impl TryFrom<&PreciseDecimal> for i128
impl TryFrom<&PreciseDecimal> for i128
Source§impl TryFrom<&PreciseDecimal> for isize
impl TryFrom<&PreciseDecimal> for isize
Source§impl TryFrom<&PreciseDecimal> for u8
impl TryFrom<&PreciseDecimal> for u8
Source§impl TryFrom<&PreciseDecimal> for u16
impl TryFrom<&PreciseDecimal> for u16
Source§impl TryFrom<&PreciseDecimal> for u32
impl TryFrom<&PreciseDecimal> for u32
Source§impl TryFrom<&PreciseDecimal> for u64
impl TryFrom<&PreciseDecimal> for u64
Source§impl TryFrom<&PreciseDecimal> for u128
impl TryFrom<&PreciseDecimal> for u128
Source§impl TryFrom<&PreciseDecimal> for usize
impl TryFrom<&PreciseDecimal> for usize
Source§impl TryFrom<&[u8]> for ManifestExpression
impl TryFrom<&[u8]> for ManifestExpression
Source§impl TryFrom<&[u8]> for CompressedEdwardsY
impl TryFrom<&[u8]> for CompressedEdwardsY
type Error = TryFromSliceError
Source§impl TryFrom<&[u8]> for CompressedRistretto
impl TryFrom<&[u8]> for CompressedRistretto
type Error = TryFromSliceError
Source§impl TryFrom<&[u8]> for Bls12381G1PublicKey
impl TryFrom<&[u8]> for Bls12381G1PublicKey
Source§impl TryFrom<&[u8]> for Bls12381G2Signature
impl TryFrom<&[u8]> for Bls12381G2Signature
Source§impl TryFrom<&[u8]> for ComponentAddress
impl TryFrom<&[u8]> for ComponentAddress
Source§impl TryFrom<&[u8]> for Ed25519PublicKey
impl TryFrom<&[u8]> for Ed25519PublicKey
Source§impl TryFrom<&[u8]> for Ed25519Signature
impl TryFrom<&[u8]> for Ed25519Signature
Source§impl TryFrom<&[u8]> for GlobalAddress
impl TryFrom<&[u8]> for GlobalAddress
Source§impl TryFrom<&[u8]> for InternalAddress
impl TryFrom<&[u8]> for InternalAddress
Source§impl TryFrom<&[u8]> for ManifestAddressReservation
impl TryFrom<&[u8]> for ManifestAddressReservation
Source§impl TryFrom<&[u8]> for ManifestBlobRef
impl TryFrom<&[u8]> for ManifestBlobRef
Source§impl TryFrom<&[u8]> for ManifestBucket
impl TryFrom<&[u8]> for ManifestBucket
Source§impl TryFrom<&[u8]> for ManifestDecimal
impl TryFrom<&[u8]> for ManifestDecimal
Source§impl TryFrom<&[u8]> for ManifestPreciseDecimal
impl TryFrom<&[u8]> for ManifestPreciseDecimal
Source§impl TryFrom<&[u8]> for ManifestProof
impl TryFrom<&[u8]> for ManifestProof
Source§impl TryFrom<&[u8]> for PackageAddress
impl TryFrom<&[u8]> for PackageAddress
Source§impl TryFrom<&[u8]> for PreciseDecimal
impl TryFrom<&[u8]> for PreciseDecimal
Source§impl TryFrom<&[u8]> for ResourceAddress
impl TryFrom<&[u8]> for ResourceAddress
Source§impl TryFrom<&[u8]> for Secp256k1PublicKey
impl TryFrom<&[u8]> for Secp256k1PublicKey
Source§impl TryFrom<&[u8]> for Secp256k1Signature
impl TryFrom<&[u8]> for Secp256k1Signature
1.59.0 · Source§impl TryFrom<char> for u8
Maps a char
with code point in U+0000..=U+00FF to a byte in 0x00..=0xFF with same value,
failing if the code point is greater than U+00FF.
impl TryFrom<char> for u8
Maps a char
with code point in U+0000..=U+00FF to a byte in 0x00..=0xFF with same value,
failing if the code point is greater than U+00FF.
See impl From<u8> for char
for details on the encoding.
type Error = TryFromCharError
1.74.0 · Source§impl TryFrom<char> for u16
Maps a char
with code point in U+0000..=U+FFFF to a u16
in 0x0000..=0xFFFF with same value,
failing if the code point is greater than U+FFFF.
impl TryFrom<char> for u16
Maps a char
with code point in U+0000..=U+FFFF to a u16
in 0x0000..=0xFFFF with same value,
failing if the code point is greater than U+FFFF.
This corresponds to the UCS-2 encoding, as specified in ISO/IEC 10646:2003.
type Error = TryFromCharError
Source§impl TryFrom<u16> for SmallIndex
impl TryFrom<u16> for SmallIndex
type Error = SmallIndexError
Source§impl TryFrom<u32> for SmallIndex
impl TryFrom<u32> for SmallIndex
type Error = SmallIndexError
Source§impl TryFrom<u64> for SmallIndex
impl TryFrom<u64> for SmallIndex
type Error = SmallIndexError
Source§impl TryFrom<usize> for SmallIndex
impl TryFrom<usize> for SmallIndex
type Error = SmallIndexError
Source§impl TryFrom<ByteString> for String
impl TryFrom<ByteString> for String
type Error = FromUtf8Error
Source§impl TryFrom<GlobalAddress> for ComponentAddress
impl TryFrom<GlobalAddress> for ComponentAddress
Source§impl TryFrom<GlobalAddress> for PackageAddress
impl TryFrom<GlobalAddress> for PackageAddress
Source§impl TryFrom<GlobalAddress> for ResourceAddress
impl TryFrom<GlobalAddress> for ResourceAddress
Source§impl TryFrom<I192> for PreciseDecimal
impl TryFrom<I192> for PreciseDecimal
Source§impl TryFrom<I256> for PreciseDecimal
impl TryFrom<I256> for PreciseDecimal
Source§impl TryFrom<I320> for PreciseDecimal
impl TryFrom<I320> for PreciseDecimal
Source§impl TryFrom<I384> for PreciseDecimal
impl TryFrom<I384> for PreciseDecimal
Source§impl TryFrom<I448> for PreciseDecimal
impl TryFrom<I448> for PreciseDecimal
Source§impl TryFrom<I512> for PreciseDecimal
impl TryFrom<I512> for PreciseDecimal
Source§impl TryFrom<Instant> for UtcDateTime
impl TryFrom<Instant> for UtcDateTime
type Error = DateTimeError
Source§impl TryFrom<NodeId> for ComponentAddress
impl TryFrom<NodeId> for ComponentAddress
Source§impl TryFrom<NodeId> for GlobalAddress
impl TryFrom<NodeId> for GlobalAddress
Source§impl TryFrom<NodeId> for InternalAddress
impl TryFrom<NodeId> for InternalAddress
Source§impl TryFrom<NodeId> for PackageAddress
impl TryFrom<NodeId> for PackageAddress
Source§impl TryFrom<NodeId> for ResourceAddress
impl TryFrom<NodeId> for ResourceAddress
Source§impl TryFrom<PreciseDecimal> for i8
impl TryFrom<PreciseDecimal> for i8
Source§impl TryFrom<PreciseDecimal> for i16
impl TryFrom<PreciseDecimal> for i16
Source§impl TryFrom<PreciseDecimal> for i32
impl TryFrom<PreciseDecimal> for i32
Source§impl TryFrom<PreciseDecimal> for i64
impl TryFrom<PreciseDecimal> for i64
Source§impl TryFrom<PreciseDecimal> for i128
impl TryFrom<PreciseDecimal> for i128
Source§impl TryFrom<PreciseDecimal> for isize
impl TryFrom<PreciseDecimal> for isize
Source§impl TryFrom<PreciseDecimal> for u8
impl TryFrom<PreciseDecimal> for u8
Source§impl TryFrom<PreciseDecimal> for u16
impl TryFrom<PreciseDecimal> for u16
Source§impl TryFrom<PreciseDecimal> for u32
impl TryFrom<PreciseDecimal> for u32
Source§impl TryFrom<PreciseDecimal> for u64
impl TryFrom<PreciseDecimal> for u64
Source§impl TryFrom<PreciseDecimal> for u128
impl TryFrom<PreciseDecimal> for u128
Source§impl TryFrom<PreciseDecimal> for usize
impl TryFrom<PreciseDecimal> for usize
Source§impl TryFrom<PreciseDecimal> for Decimal
impl TryFrom<PreciseDecimal> for Decimal
type Error = ParseDecimalError
Source§impl TryFrom<String> for NonFungibleLocalId
impl TryFrom<String> for NonFungibleLocalId
Source§impl TryFrom<String> for PreciseDecimal
impl TryFrom<String> for PreciseDecimal
Source§impl TryFrom<String> for StringNonFungibleLocalId
impl TryFrom<String> for StringNonFungibleLocalId
Source§impl TryFrom<U192> for PreciseDecimal
impl TryFrom<U192> for PreciseDecimal
Source§impl TryFrom<U256> for PreciseDecimal
impl TryFrom<U256> for PreciseDecimal
Source§impl TryFrom<U320> for PreciseDecimal
impl TryFrom<U320> for PreciseDecimal
Source§impl TryFrom<U384> for PreciseDecimal
impl TryFrom<U384> for PreciseDecimal
Source§impl TryFrom<U448> for PreciseDecimal
impl TryFrom<U448> for PreciseDecimal
Source§impl TryFrom<U512> for PreciseDecimal
impl TryFrom<U512> for PreciseDecimal
Source§impl TryFrom<UncheckedOrigin> for CheckedOrigin
impl TryFrom<UncheckedOrigin> for CheckedOrigin
Source§impl TryFrom<UncheckedUrl> for CheckedUrl
impl TryFrom<UncheckedUrl> for CheckedUrl
Source§impl<'a> TryFrom<&'a blst_scalar> for &'a blst::min_pk::SecretKey
impl<'a> TryFrom<&'a blst_scalar> for &'a blst::min_pk::SecretKey
type Error = BLST_ERROR
Source§impl<'a> TryFrom<&'a blst_scalar> for &'a blst::min_sig::SecretKey
impl<'a> TryFrom<&'a blst_scalar> for &'a blst::min_sig::SecretKey
type Error = BLST_ERROR
Source§impl<'a, E> TryFrom<&'a [u8]> for RawPayload<'a, E>where
E: CustomExtension,
impl<'a, E> TryFrom<&'a [u8]> for RawPayload<'a, E>where
E: CustomExtension,
1.34.0 · Source§impl<'a, T, const N: usize> TryFrom<&'a [T]> for &'a [T; N]
Tries to create an array ref &[T; N]
from a slice ref &[T]
. Succeeds if
slice.len() == N
.
impl<'a, T, const N: usize> TryFrom<&'a [T]> for &'a [T; N]
Tries to create an array ref &[T; N]
from a slice ref &[T]
. Succeeds if
slice.len() == N
.
let bytes: [u8; 3] = [1, 0, 2];
let bytes_head: &[u8; 2] = <&[u8; 2]>::try_from(&bytes[0..2]).unwrap();
assert_eq!(1, u16::from_le_bytes(*bytes_head));
let bytes_tail: &[u8; 2] = bytes[1..3].try_into().unwrap();
assert_eq!(512, u16::from_le_bytes(*bytes_tail));
type Error = TryFromSliceError
1.34.0 · Source§impl<'a, T, const N: usize> TryFrom<&'a mut [T]> for &'a mut [T; N]
Tries to create a mutable array ref &mut [T; N]
from a mutable slice ref
&mut [T]
. Succeeds if slice.len() == N
.
impl<'a, T, const N: usize> TryFrom<&'a mut [T]> for &'a mut [T; N]
Tries to create a mutable array ref &mut [T; N]
from a mutable slice ref
&mut [T]
. Succeeds if slice.len() == N
.
let mut bytes: [u8; 3] = [1, 0, 2];
let bytes_head: &mut [u8; 2] = <&mut [u8; 2]>::try_from(&mut bytes[0..2]).unwrap();
assert_eq!(1, u16::from_le_bytes(*bytes_head));
let bytes_tail: &mut [u8; 2] = (&mut bytes[1..3]).try_into().unwrap();
assert_eq!(512, u16::from_le_bytes(*bytes_tail));
type Error = TryFromSliceError
1.43.0 · Source§impl<T, A, const N: usize> TryFrom<Arc<[T], A>> for Arc<[T; N], A>where
A: Allocator,
impl<T, A, const N: usize> TryFrom<Arc<[T], A>> for Arc<[T; N], A>where
A: Allocator,
1.34.0 · Source§impl<T, const N: usize> TryFrom<&[T]> for [T; N]where
T: Copy,
Tries to create an array [T; N]
by copying from a slice &[T]
.
Succeeds if slice.len() == N
.
impl<T, const N: usize> TryFrom<&[T]> for [T; N]where
T: Copy,
Tries to create an array [T; N]
by copying from a slice &[T]
.
Succeeds if slice.len() == N
.
let bytes: [u8; 3] = [1, 0, 2];
let bytes_head: [u8; 2] = <[u8; 2]>::try_from(&bytes[0..2]).unwrap();
assert_eq!(1, u16::from_le_bytes(bytes_head));
let bytes_tail: [u8; 2] = bytes[1..3].try_into().unwrap();
assert_eq!(512, u16::from_le_bytes(bytes_tail));
type Error = TryFromSliceError
1.59.0 · Source§impl<T, const N: usize> TryFrom<&mut [T]> for [T; N]where
T: Copy,
Tries to create an array [T; N]
by copying from a mutable slice &mut [T]
.
Succeeds if slice.len() == N
.
impl<T, const N: usize> TryFrom<&mut [T]> for [T; N]where
T: Copy,
Tries to create an array [T; N]
by copying from a mutable slice &mut [T]
.
Succeeds if slice.len() == N
.
let mut bytes: [u8; 3] = [1, 0, 2];
let bytes_head: [u8; 2] = <[u8; 2]>::try_from(&mut bytes[0..2]).unwrap();
assert_eq!(1, u16::from_le_bytes(bytes_head));
let bytes_tail: [u8; 2] = (&mut bytes[1..3]).try_into().unwrap();
assert_eq!(512, u16::from_le_bytes(bytes_tail));