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§
Object Safety§
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 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 StringNonFungibleLocalId
impl TryFrom<&str> for StringNonFungibleLocalId
type Error = ContentValidationError
source§impl TryFrom<&str> for PreciseDecimal
impl TryFrom<&str> for PreciseDecimal
type Error = ParsePreciseDecimalError
source§impl TryFrom<&PreciseDecimal> for i8
impl TryFrom<&PreciseDecimal> for i8
type Error = ParsePreciseDecimalError
source§impl TryFrom<&PreciseDecimal> for i16
impl TryFrom<&PreciseDecimal> for i16
type Error = ParsePreciseDecimalError
source§impl TryFrom<&PreciseDecimal> for i32
impl TryFrom<&PreciseDecimal> for i32
type Error = ParsePreciseDecimalError
source§impl TryFrom<&PreciseDecimal> for i64
impl TryFrom<&PreciseDecimal> for i64
type Error = ParsePreciseDecimalError
source§impl TryFrom<&PreciseDecimal> for i128
impl TryFrom<&PreciseDecimal> for i128
type Error = ParsePreciseDecimalError
source§impl TryFrom<&PreciseDecimal> for isize
impl TryFrom<&PreciseDecimal> for isize
type Error = ParsePreciseDecimalError
source§impl TryFrom<&PreciseDecimal> for u8
impl TryFrom<&PreciseDecimal> for u8
type Error = ParsePreciseDecimalError
source§impl TryFrom<&PreciseDecimal> for u16
impl TryFrom<&PreciseDecimal> for u16
type Error = ParsePreciseDecimalError
source§impl TryFrom<&PreciseDecimal> for u32
impl TryFrom<&PreciseDecimal> for u32
type Error = ParsePreciseDecimalError
source§impl TryFrom<&PreciseDecimal> for u64
impl TryFrom<&PreciseDecimal> for u64
type Error = ParsePreciseDecimalError
source§impl TryFrom<&PreciseDecimal> for u128
impl TryFrom<&PreciseDecimal> for u128
type Error = ParsePreciseDecimalError
source§impl TryFrom<&PreciseDecimal> for usize
impl TryFrom<&PreciseDecimal> for usize
type Error = ParsePreciseDecimalError
source§impl TryFrom<&[u8]> for ManifestExpression
impl TryFrom<&[u8]> for ManifestExpression
source§impl TryFrom<&[u8]> for Bls12381G1PublicKey
impl TryFrom<&[u8]> for Bls12381G1PublicKey
type Error = ParseBlsPublicKeyError
source§impl TryFrom<&[u8]> for Bls12381G2Signature
impl TryFrom<&[u8]> for Bls12381G2Signature
type Error = ParseBlsSignatureError
source§impl TryFrom<&[u8]> for Ed25519PublicKey
impl TryFrom<&[u8]> for Ed25519PublicKey
type Error = ParseEd25519PublicKeyError
source§impl TryFrom<&[u8]> for Ed25519Signature
impl TryFrom<&[u8]> for Ed25519Signature
type Error = ParseEd25519SignatureError
source§impl TryFrom<&[u8]> for Secp256k1PublicKey
impl TryFrom<&[u8]> for Secp256k1PublicKey
source§impl TryFrom<&[u8]> for Secp256k1Signature
impl TryFrom<&[u8]> for Secp256k1Signature
source§impl TryFrom<&[u8]> for ManifestAddressReservation
impl TryFrom<&[u8]> for ManifestAddressReservation
source§impl TryFrom<&[u8]> for ManifestBlobRef
impl TryFrom<&[u8]> for ManifestBlobRef
type Error = ParseManifestBlobRefError
source§impl TryFrom<&[u8]> for ManifestBucket
impl TryFrom<&[u8]> for ManifestBucket
type Error = ParseManifestBucketError
source§impl TryFrom<&[u8]> for ManifestDecimal
impl TryFrom<&[u8]> for ManifestDecimal
type Error = ParseManifestDecimalError
source§impl TryFrom<&[u8]> for ManifestPreciseDecimal
impl TryFrom<&[u8]> for ManifestPreciseDecimal
source§impl TryFrom<&[u8]> for ManifestProof
impl TryFrom<&[u8]> for ManifestProof
type Error = ParseManifestProofError
source§impl TryFrom<&[u8]> for PreciseDecimal
impl TryFrom<&[u8]> for PreciseDecimal
type Error = ParsePreciseDecimalError
source§impl TryFrom<&[u8]> for ComponentAddress
impl TryFrom<&[u8]> for ComponentAddress
type Error = ParseComponentAddressError
source§impl TryFrom<&[u8]> for GlobalAddress
impl TryFrom<&[u8]> for GlobalAddress
type Error = ParseGlobalAddressError
source§impl TryFrom<&[u8]> for InternalAddress
impl TryFrom<&[u8]> for InternalAddress
type Error = ParseInternalAddressError
source§impl TryFrom<&[u8]> for PackageAddress
impl TryFrom<&[u8]> for PackageAddress
type Error = ParsePackageAddressError
source§impl TryFrom<&[u8]> for ResourceAddress
impl TryFrom<&[u8]> for ResourceAddress
type Error = ParseResourceAddressError
1.59.0 · source§impl TryFrom<char> for u8
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
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<UncheckedOrigin> for CheckedOrigin
impl TryFrom<UncheckedOrigin> for CheckedOrigin
source§impl TryFrom<UncheckedUrl> for CheckedUrl
impl TryFrom<UncheckedUrl> for CheckedUrl
source§impl TryFrom<Vec<u8>> for NonFungibleLocalId
impl TryFrom<Vec<u8>> for NonFungibleLocalId
type Error = ContentValidationError
source§impl TryFrom<Vec<u8>> for BytesNonFungibleLocalId
impl TryFrom<Vec<u8>> for BytesNonFungibleLocalId
type Error = ContentValidationError
source§impl TryFrom<I192> for PreciseDecimal
impl TryFrom<I192> for PreciseDecimal
type Error = ParsePreciseDecimalError
source§impl TryFrom<I256> for PreciseDecimal
impl TryFrom<I256> for PreciseDecimal
type Error = ParsePreciseDecimalError
source§impl TryFrom<I320> for PreciseDecimal
impl TryFrom<I320> for PreciseDecimal
type Error = ParsePreciseDecimalError
source§impl TryFrom<I384> for PreciseDecimal
impl TryFrom<I384> for PreciseDecimal
type Error = ParsePreciseDecimalError
source§impl TryFrom<I448> for PreciseDecimal
impl TryFrom<I448> for PreciseDecimal
type Error = ParsePreciseDecimalError
source§impl TryFrom<I512> for PreciseDecimal
impl TryFrom<I512> for PreciseDecimal
type Error = ParsePreciseDecimalError
source§impl TryFrom<PreciseDecimal> for i8
impl TryFrom<PreciseDecimal> for i8
type Error = ParsePreciseDecimalError
source§impl TryFrom<PreciseDecimal> for i16
impl TryFrom<PreciseDecimal> for i16
type Error = ParsePreciseDecimalError
source§impl TryFrom<PreciseDecimal> for i32
impl TryFrom<PreciseDecimal> for i32
type Error = ParsePreciseDecimalError
source§impl TryFrom<PreciseDecimal> for i64
impl TryFrom<PreciseDecimal> for i64
type Error = ParsePreciseDecimalError
source§impl TryFrom<PreciseDecimal> for i128
impl TryFrom<PreciseDecimal> for i128
type Error = ParsePreciseDecimalError
source§impl TryFrom<PreciseDecimal> for isize
impl TryFrom<PreciseDecimal> for isize
type Error = ParsePreciseDecimalError
source§impl TryFrom<PreciseDecimal> for u8
impl TryFrom<PreciseDecimal> for u8
type Error = ParsePreciseDecimalError
source§impl TryFrom<PreciseDecimal> for u16
impl TryFrom<PreciseDecimal> for u16
type Error = ParsePreciseDecimalError
source§impl TryFrom<PreciseDecimal> for u32
impl TryFrom<PreciseDecimal> for u32
type Error = ParsePreciseDecimalError
source§impl TryFrom<PreciseDecimal> for u64
impl TryFrom<PreciseDecimal> for u64
type Error = ParsePreciseDecimalError
source§impl TryFrom<PreciseDecimal> for u128
impl TryFrom<PreciseDecimal> for u128
type Error = ParsePreciseDecimalError
source§impl TryFrom<PreciseDecimal> for usize
impl TryFrom<PreciseDecimal> for usize
type Error = ParsePreciseDecimalError
source§impl TryFrom<PreciseDecimal> for Decimal
impl TryFrom<PreciseDecimal> for Decimal
type Error = ParseDecimalError
source§impl TryFrom<U192> for PreciseDecimal
impl TryFrom<U192> for PreciseDecimal
type Error = ParsePreciseDecimalError
source§impl TryFrom<U256> for PreciseDecimal
impl TryFrom<U256> for PreciseDecimal
type Error = ParsePreciseDecimalError
source§impl TryFrom<U320> for PreciseDecimal
impl TryFrom<U320> for PreciseDecimal
type Error = ParsePreciseDecimalError
source§impl TryFrom<U384> for PreciseDecimal
impl TryFrom<U384> for PreciseDecimal
type Error = ParsePreciseDecimalError
source§impl TryFrom<U448> for PreciseDecimal
impl TryFrom<U448> for PreciseDecimal
type Error = ParsePreciseDecimalError
source§impl TryFrom<U512> for PreciseDecimal
impl TryFrom<U512> for PreciseDecimal
type Error = ParsePreciseDecimalError
source§impl TryFrom<Instant> for UtcDateTime
impl TryFrom<Instant> for UtcDateTime
type Error = DateTimeError
source§impl TryFrom<GlobalAddress> for ComponentAddress
impl TryFrom<GlobalAddress> for ComponentAddress
type Error = ParseComponentAddressError
source§impl TryFrom<GlobalAddress> for PackageAddress
impl TryFrom<GlobalAddress> for PackageAddress
type Error = ParsePackageAddressError
source§impl TryFrom<GlobalAddress> for ResourceAddress
impl TryFrom<GlobalAddress> for ResourceAddress
type Error = ParseResourceAddressError
source§impl TryFrom<NodeId> for ComponentAddress
impl TryFrom<NodeId> for ComponentAddress
type Error = ParseComponentAddressError
source§impl TryFrom<NodeId> for GlobalAddress
impl TryFrom<NodeId> for GlobalAddress
type Error = ParseGlobalAddressError
source§impl TryFrom<NodeId> for InternalAddress
impl TryFrom<NodeId> for InternalAddress
type Error = ParseInternalAddressError
source§impl TryFrom<NodeId> for PackageAddress
impl TryFrom<NodeId> for PackageAddress
type Error = ParsePackageAddressError
source§impl TryFrom<NodeId> for ResourceAddress
impl TryFrom<NodeId> for ResourceAddress
type Error = ParseResourceAddressError
source§impl TryFrom<String> for NonFungibleLocalId
impl TryFrom<String> for NonFungibleLocalId
type Error = ContentValidationError
source§impl TryFrom<String> for StringNonFungibleLocalId
impl TryFrom<String> for StringNonFungibleLocalId
type Error = ContentValidationError
source§impl TryFrom<String> for PreciseDecimal
impl TryFrom<String> for PreciseDecimal
type Error = ParsePreciseDecimalError
source§impl TryFrom<[u8; 30]> for ComponentAddress
impl TryFrom<[u8; 30]> for ComponentAddress
type Error = ParseComponentAddressError
source§impl TryFrom<[u8; 30]> for GlobalAddress
impl TryFrom<[u8; 30]> for GlobalAddress
type Error = ParseGlobalAddressError
source§impl TryFrom<[u8; 30]> for InternalAddress
impl TryFrom<[u8; 30]> for InternalAddress
type Error = ParseInternalAddressError
source§impl TryFrom<[u8; 30]> for PackageAddress
impl TryFrom<[u8; 30]> for PackageAddress
type Error = ParsePackageAddressError
source§impl TryFrom<[u8; 30]> for ResourceAddress
impl TryFrom<[u8; 30]> for ResourceAddress
type Error = ParseResourceAddressError
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,
source§impl<'a, T, const N: usize> TryFrom<&'a [T]> for &'a [T; 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
source§impl<'a, T, const N: usize> TryFrom<&'a mut [T]> for &'a mut [T; 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,
source§impl<T, const N: usize> TryFrom<&[T]> for [T; N]where
T: Copy,
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,
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));