Trait sgx_tstd::convert::TryFrom

1.34.0 · source ·
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 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:

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§

source

type Error

The type returned in the event of a conversion error.

Required Methods§

source

fn try_from(value: T) -> Result<Self, Self::Error>

Performs the conversion.

Object Safety§

This trait is not object safe.

Implementors§

source§

impl TryFrom<&[u8]> for Ec256PrivateKey

source§

impl TryFrom<&[u8]> for Ec256PublicKey

source§

impl TryFrom<&[u8]> for Ec256SharedKey

source§

impl TryFrom<&[u8]> for Ec256Signature

source§

impl TryFrom<&[u8]> for Rsa2048Key

source§

impl TryFrom<&[u8]> for Rsa2048Param

source§

impl TryFrom<&[u8]> for Rsa2048PrivKey

source§

impl TryFrom<&[u8]> for Rsa2048PubKey

source§

impl TryFrom<&[u8]> for Rsa2048Signature

source§

impl TryFrom<&[u8]> for Rsa3072Key

source§

impl TryFrom<&[u8]> for Rsa3072Param

source§

impl TryFrom<&[u8]> for Rsa3072PrivKey

source§

impl TryFrom<&[u8]> for Rsa3072PubKey

source§

impl TryFrom<&[u8]> for Rsa3072Signature

source§

impl TryFrom<&[u8]> for Sha1Hash

source§

impl TryFrom<&[u8]> for Sha256Hash

source§

impl TryFrom<&[u8]> for Sha384Hash

source§

impl TryFrom<&[u8]> for Sm3Hash

source§

impl TryFrom<&[u8]> for QlQe3Id

source§

impl TryFrom<&[u8]> for BaseName

source§

impl TryFrom<&[u8]> for QuoteNonce

source§

impl TryFrom<&[u8]> for Spid

source§

impl TryFrom<&[u8]> for TeeAttributes

source§

impl TryFrom<&[u8]> for TeeCpuSvn

source§

impl TryFrom<&[u8]> for TeeMeasurement

source§

impl TryFrom<&[u8]> for TeeReportData

source§

impl TryFrom<&[u8]> for ConfigId

source§

impl TryFrom<&[u8]> for CpuSvn

source§

impl TryFrom<&[u8]> for KeyId

source§

impl TryFrom<&[u8]> for Measurement

source§

impl TryFrom<&[u8]> for ReportData

source§

impl TryFrom<&[u8]> for SwitchlessWokerStats

source§

impl TryFrom<&[u8]> for TeeTcbSvn

source§

impl TryFrom<(i64, i64)> for Timespec

§

type Error = i32

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.

See impl From<u8> for char for details on the encoding.

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.

This corresponds to the UCS-2 encoding, as specified in ISO/IEC 10646:2003.

source§

impl TryFrom<i8> for u8

source§

impl TryFrom<i8> for u16

source§

impl TryFrom<i8> for u32

source§

impl TryFrom<i8> for u64

source§

impl TryFrom<i8> for u128

source§

impl TryFrom<i8> for usize

1.46.0 · source§

impl TryFrom<i8> for NonZeroI8

source§

impl TryFrom<i16> for i8

source§

impl TryFrom<i16> for u8

source§

impl TryFrom<i16> for u16

source§

impl TryFrom<i16> for u32

source§

impl TryFrom<i16> for u64

source§

impl TryFrom<i16> for u128

source§

impl TryFrom<i16> for usize

1.46.0 · source§

impl TryFrom<i16> for NonZeroI16

source§

impl TryFrom<i32> for i8

source§

impl TryFrom<i32> for i16

source§

impl TryFrom<i32> for isize

source§

impl TryFrom<i32> for u8

source§

impl TryFrom<i32> for u16

source§

impl TryFrom<i32> for u32

source§

impl TryFrom<i32> for u64

source§

impl TryFrom<i32> for u128

source§

impl TryFrom<i32> for usize

1.46.0 · source§

impl TryFrom<i32> for NonZeroI32

source§

impl TryFrom<i64> for i8

source§

impl TryFrom<i64> for i16

source§

impl TryFrom<i64> for i32

source§

impl TryFrom<i64> for isize

source§

impl TryFrom<i64> for u8

source§

impl TryFrom<i64> for u16

source§

impl TryFrom<i64> for u32

source§

impl TryFrom<i64> for u64

source§

impl TryFrom<i64> for u128

source§

impl TryFrom<i64> for usize

1.46.0 · source§

impl TryFrom<i64> for NonZeroI64

source§

impl TryFrom<i128> for i8

source§

impl TryFrom<i128> for i16

source§

impl TryFrom<i128> for i32

source§

impl TryFrom<i128> for i64

source§

impl TryFrom<i128> for isize

source§

impl TryFrom<i128> for u8

source§

impl TryFrom<i128> for u16

source§

impl TryFrom<i128> for u32

source§

impl TryFrom<i128> for u64

source§

impl TryFrom<i128> for u128

source§

impl TryFrom<i128> for usize

1.46.0 · source§

impl TryFrom<i128> for NonZeroI128

source§

impl TryFrom<isize> for i8

source§

impl TryFrom<isize> for i16

source§

impl TryFrom<isize> for i32

source§

impl TryFrom<isize> for i64

source§

impl TryFrom<isize> for i128

source§

impl TryFrom<isize> for u8

source§

impl TryFrom<isize> for u16

source§

impl TryFrom<isize> for u32

source§

impl TryFrom<isize> for u64

source§

impl TryFrom<isize> for u128

source§

impl TryFrom<isize> for usize

1.46.0 · source§

impl TryFrom<isize> for NonZeroIsize

source§

impl TryFrom<u8> for PageType

source§

impl TryFrom<u8> for EcResult

source§

impl TryFrom<u8> for ProdType

source§

impl TryFrom<u8> for QeType

source§

impl TryFrom<u8> for ProtectPerm

source§

impl TryFrom<u8> for i8

1.46.0 · source§

impl TryFrom<u8> for NonZeroU8

source§

impl TryFrom<u16> for KeyName

source§

impl TryFrom<u16> for i8

source§

impl TryFrom<u16> for i16

source§

impl TryFrom<u16> for isize

source§

impl TryFrom<u16> for u8

1.46.0 · source§

impl TryFrom<u16> for NonZeroU16

source§

impl TryFrom<u32> for FutexClockId

source§

impl TryFrom<u32> for FutexOp

source§

impl TryFrom<u32> for Feature

source§

impl TryFrom<u32> for Version

source§

impl TryFrom<u32> for ExceptionType

source§

impl TryFrom<u32> for ExceptionVector

source§

impl TryFrom<u32> for HandleResult

source§

impl TryFrom<u32> for PceError

source§

impl TryFrom<u32> for QcnlError

source§

impl TryFrom<u32> for Quote3Error

source§

impl TryFrom<u32> for SgxStatus

source§

impl TryFrom<u32> for DirIndex

source§

impl TryFrom<u32> for RsaKeyType

source§

impl TryFrom<u32> for RsaResult

source§

impl TryFrom<u32> for PckCertFlag

source§

impl TryFrom<u32> for QlAttestationAlgorithmId

source§

impl TryFrom<u32> for QlCertKeyType

source§

impl TryFrom<u32> for QlConfigVersion

source§

impl TryFrom<u32> for QlLogLevel

source§

impl TryFrom<u32> for QlPathType

source§

impl TryFrom<u32> for QlQvResult

source§

impl TryFrom<u32> for QlRequestPolicy

source§

impl TryFrom<u32> for QvPathType

source§

impl TryFrom<u32> for DhSessionRole

source§

impl TryFrom<u32> for EnclaveMode

source§

impl TryFrom<u32> for RaKeyType

source§

impl TryFrom<u32> for QuoteSignType

source§

impl TryFrom<u32> for SwitchlessWokerEvent

source§

impl TryFrom<u32> for SwitchlessWokerType

source§

impl TryFrom<u32> for SgxDeviceStatus

source§

impl TryFrom<u32> for char

source§

impl TryFrom<u32> for i8

source§

impl TryFrom<u32> for i16

source§

impl TryFrom<u32> for i32

source§

impl TryFrom<u32> for isize

source§

impl TryFrom<u32> for u8

source§

impl TryFrom<u32> for u16

source§

impl TryFrom<u32> for usize

1.46.0 · source§

impl TryFrom<u32> for NonZeroU32

source§

impl TryFrom<u64> for i8

source§

impl TryFrom<u64> for i16

source§

impl TryFrom<u64> for i32

source§

impl TryFrom<u64> for i64

source§

impl TryFrom<u64> for isize

source§

impl TryFrom<u64> for u8

source§

impl TryFrom<u64> for u16

source§

impl TryFrom<u64> for u32

source§

impl TryFrom<u64> for usize

1.46.0 · source§

impl TryFrom<u64> for NonZeroU64

source§

impl TryFrom<u128> for i8

source§

impl TryFrom<u128> for i16

source§

impl TryFrom<u128> for i32

source§

impl TryFrom<u128> for i64

source§

impl TryFrom<u128> for i128

source§

impl TryFrom<u128> for isize

source§

impl TryFrom<u128> for u8

source§

impl TryFrom<u128> for u16

source§

impl TryFrom<u128> for u32

source§

impl TryFrom<u128> for u64

source§

impl TryFrom<u128> for usize

1.46.0 · source§

impl TryFrom<u128> for NonZeroU128

source§

impl TryFrom<usize> for TcsPolicy

source§

impl TryFrom<usize> for i8

source§

impl TryFrom<usize> for i16

source§

impl TryFrom<usize> for i32

source§

impl TryFrom<usize> for i64

source§

impl TryFrom<usize> for i128

source§

impl TryFrom<usize> for isize

source§

impl TryFrom<usize> for u8

source§

impl TryFrom<usize> for u16

source§

impl TryFrom<usize> for u32

source§

impl TryFrom<usize> for u64

source§

impl TryFrom<usize> for u128

1.46.0 · source§

impl TryFrom<usize> for NonZeroUsize

source§

impl TryFrom<usize> for Alignment

source§

impl TryFrom<addr_info> for AddrInfo

source§

impl TryFrom<Timespec> for Duration

§

type Error = i32

source§

impl TryFrom<timespec> for Timespec

§

type Error = i32

1.49.0 · source§

impl TryFrom<NonZeroI8> for NonZeroU8

1.49.0 · source§

impl TryFrom<NonZeroI8> for NonZeroU16

1.49.0 · source§

impl TryFrom<NonZeroI8> for NonZeroU32

1.49.0 · source§

impl TryFrom<NonZeroI8> for NonZeroU64

1.49.0 · source§

impl TryFrom<NonZeroI8> for NonZeroU128

1.49.0 · source§

impl TryFrom<NonZeroI8> for NonZeroUsize

1.49.0 · source§

impl TryFrom<NonZeroI16> for NonZeroI8

1.49.0 · source§

impl TryFrom<NonZeroI16> for NonZeroU8

1.49.0 · source§

impl TryFrom<NonZeroI16> for NonZeroU16

1.49.0 · source§

impl TryFrom<NonZeroI16> for NonZeroU32

1.49.0 · source§

impl TryFrom<NonZeroI16> for NonZeroU64

1.49.0 · source§

impl TryFrom<NonZeroI16> for NonZeroU128

1.49.0 · source§

impl TryFrom<NonZeroI16> for NonZeroUsize

1.49.0 · source§

impl TryFrom<NonZeroI32> for NonZeroI8

1.49.0 · source§

impl TryFrom<NonZeroI32> for NonZeroI16

1.49.0 · source§

impl TryFrom<NonZeroI32> for NonZeroIsize

1.49.0 · source§

impl TryFrom<NonZeroI32> for NonZeroU8

1.49.0 · source§

impl TryFrom<NonZeroI32> for NonZeroU16

1.49.0 · source§

impl TryFrom<NonZeroI32> for NonZeroU32

1.49.0 · source§

impl TryFrom<NonZeroI32> for NonZeroU64

1.49.0 · source§

impl TryFrom<NonZeroI32> for NonZeroU128

1.49.0 · source§

impl TryFrom<NonZeroI32> for NonZeroUsize

1.49.0 · source§

impl TryFrom<NonZeroI64> for NonZeroI8

1.49.0 · source§

impl TryFrom<NonZeroI64> for NonZeroI16

1.49.0 · source§

impl TryFrom<NonZeroI64> for NonZeroI32

1.49.0 · source§

impl TryFrom<NonZeroI64> for NonZeroIsize

1.49.0 · source§

impl TryFrom<NonZeroI64> for NonZeroU8

1.49.0 · source§

impl TryFrom<NonZeroI64> for NonZeroU16

1.49.0 · source§

impl TryFrom<NonZeroI64> for NonZeroU32

1.49.0 · source§

impl TryFrom<NonZeroI64> for NonZeroU64

1.49.0 · source§

impl TryFrom<NonZeroI64> for NonZeroU128

1.49.0 · source§

impl TryFrom<NonZeroI64> for NonZeroUsize

1.49.0 · source§

impl TryFrom<NonZeroI128> for NonZeroI8

1.49.0 · source§

impl TryFrom<NonZeroI128> for NonZeroI16

1.49.0 · source§

impl TryFrom<NonZeroI128> for NonZeroI32

1.49.0 · source§

impl TryFrom<NonZeroI128> for NonZeroI64

1.49.0 · source§

impl TryFrom<NonZeroI128> for NonZeroIsize

1.49.0 · source§

impl TryFrom<NonZeroI128> for NonZeroU8

1.49.0 · source§

impl TryFrom<NonZeroI128> for NonZeroU16

1.49.0 · source§

impl TryFrom<NonZeroI128> for NonZeroU32

1.49.0 · source§

impl TryFrom<NonZeroI128> for NonZeroU64

1.49.0 · source§

impl TryFrom<NonZeroI128> for NonZeroU128

1.49.0 · source§

impl TryFrom<NonZeroI128> for NonZeroUsize

1.49.0 · source§

impl TryFrom<NonZeroIsize> for NonZeroI8

1.49.0 · source§

impl TryFrom<NonZeroIsize> for NonZeroI16

1.49.0 · source§

impl TryFrom<NonZeroIsize> for NonZeroI32

1.49.0 · source§

impl TryFrom<NonZeroIsize> for NonZeroI64

1.49.0 · source§

impl TryFrom<NonZeroIsize> for NonZeroI128

1.49.0 · source§

impl TryFrom<NonZeroIsize> for NonZeroU8

1.49.0 · source§

impl TryFrom<NonZeroIsize> for NonZeroU16

1.49.0 · source§

impl TryFrom<NonZeroIsize> for NonZeroU32

1.49.0 · source§

impl TryFrom<NonZeroIsize> for NonZeroU64

1.49.0 · source§

impl TryFrom<NonZeroIsize> for NonZeroU128

1.49.0 · source§

impl TryFrom<NonZeroIsize> for NonZeroUsize

1.49.0 · source§

impl TryFrom<NonZeroU8> for NonZeroI8

1.49.0 · source§

impl TryFrom<NonZeroU16> for NonZeroI8

1.49.0 · source§

impl TryFrom<NonZeroU16> for NonZeroI16

1.49.0 · source§

impl TryFrom<NonZeroU16> for NonZeroIsize

1.49.0 · source§

impl TryFrom<NonZeroU16> for NonZeroU8

1.49.0 · source§

impl TryFrom<NonZeroU32> for NonZeroI8

1.49.0 · source§

impl TryFrom<NonZeroU32> for NonZeroI16

1.49.0 · source§

impl TryFrom<NonZeroU32> for NonZeroI32

1.49.0 · source§

impl TryFrom<NonZeroU32> for NonZeroIsize

1.49.0 · source§

impl TryFrom<NonZeroU32> for NonZeroU8

1.49.0 · source§

impl TryFrom<NonZeroU32> for NonZeroU16

1.49.0 · source§

impl TryFrom<NonZeroU32> for NonZeroUsize

1.49.0 · source§

impl TryFrom<NonZeroU64> for NonZeroI8

1.49.0 · source§

impl TryFrom<NonZeroU64> for NonZeroI16

1.49.0 · source§

impl TryFrom<NonZeroU64> for NonZeroI32

1.49.0 · source§

impl TryFrom<NonZeroU64> for NonZeroI64

1.49.0 · source§

impl TryFrom<NonZeroU64> for NonZeroIsize

1.49.0 · source§

impl TryFrom<NonZeroU64> for NonZeroU8

1.49.0 · source§

impl TryFrom<NonZeroU64> for NonZeroU16

1.49.0 · source§

impl TryFrom<NonZeroU64> for NonZeroU32

1.49.0 · source§

impl TryFrom<NonZeroU64> for NonZeroUsize

1.49.0 · source§

impl TryFrom<NonZeroU128> for NonZeroI8

1.49.0 · source§

impl TryFrom<NonZeroU128> for NonZeroI16

1.49.0 · source§

impl TryFrom<NonZeroU128> for NonZeroI32

1.49.0 · source§

impl TryFrom<NonZeroU128> for NonZeroI64

1.49.0 · source§

impl TryFrom<NonZeroU128> for NonZeroI128

1.49.0 · source§

impl TryFrom<NonZeroU128> for NonZeroIsize

1.49.0 · source§

impl TryFrom<NonZeroU128> for NonZeroU8

1.49.0 · source§

impl TryFrom<NonZeroU128> for NonZeroU16

1.49.0 · source§

impl TryFrom<NonZeroU128> for NonZeroU32

1.49.0 · source§

impl TryFrom<NonZeroU128> for NonZeroU64

1.49.0 · source§

impl TryFrom<NonZeroU128> for NonZeroUsize

1.49.0 · source§

impl TryFrom<NonZeroUsize> for NonZeroI8

1.49.0 · source§

impl TryFrom<NonZeroUsize> for NonZeroI16

1.49.0 · source§

impl TryFrom<NonZeroUsize> for NonZeroI32

1.49.0 · source§

impl TryFrom<NonZeroUsize> for NonZeroI64

1.49.0 · source§

impl TryFrom<NonZeroUsize> for NonZeroI128

1.49.0 · source§

impl TryFrom<NonZeroUsize> for NonZeroIsize

1.49.0 · source§

impl TryFrom<NonZeroUsize> for NonZeroU8

1.49.0 · source§

impl TryFrom<NonZeroUsize> for NonZeroU16

1.49.0 · source§

impl TryFrom<NonZeroUsize> for NonZeroU32

1.49.0 · source§

impl TryFrom<NonZeroUsize> for NonZeroU64

1.49.0 · source§

impl TryFrom<NonZeroUsize> for NonZeroU128

source§

impl TryFrom<NonZeroUsize> for Alignment

source§

impl<'a> TryFrom<&'a OsStr> for &'a str

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.

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));
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.

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));
1.43.0 · source§

impl<T, A, const N: usize> TryFrom<Arc<[T], A>> for Arc<[T; N], A>where A: Allocator + Clone,

§

type Error = Arc<[T], A>

1.48.0 · source§

impl<T, A, const N: usize> TryFrom<Vec<T, A>> for [T; N]where A: Allocator,

§

type Error = Vec<T, A>

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

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.

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));
source§

impl<T, const N: usize> TryFrom<&[T]> for Simd<T, N>where LaneCount<N>: SupportedLaneCount, T: SimdElement,

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.

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));
source§

impl<T, const N: usize> TryFrom<&mut [T]> for Simd<T, N>where LaneCount<N>: SupportedLaneCount, T: SimdElement,

1.43.0 · source§

impl<T, const N: usize> TryFrom<Box<[T]>> for Box<[T; N]>

§

type Error = Box<[T]>

1.43.0 · source§

impl<T, const N: usize> TryFrom<Rc<[T]>> for Rc<[T; N]>

§

type Error = Rc<[T]>

1.66.0 · source§

impl<T, const N: usize> TryFrom<Vec<T>> for Box<[T; N]>

§

type Error = Vec<T>