pub trait TryFrom<T>: Sized {
type Error;
// Required method
fn try_from(value: T) -> Result<Self, Self::Error>;
}
mtls
only.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<&String> for PathAndQuery
impl TryFrom<&String> for PathAndQuery
type Error = InvalidUri
Source§impl TryFrom<Error> for InvalidFormatDescription
impl TryFrom<Error> for InvalidFormatDescription
type Error = DifferentVariant
Source§impl TryFrom<Error> for ParseFromDescription
impl TryFrom<Error> for ParseFromDescription
type Error = DifferentVariant
Source§impl TryFrom<Error> for TryFromParsed
impl TryFrom<Error> for TryFromParsed
type Error = DifferentVariant
Source§impl TryFrom<Error> for ComponentRange
impl TryFrom<Error> for ComponentRange
type Error = DifferentVariant
Source§impl TryFrom<Error> for ConversionRange
impl TryFrom<Error> for ConversionRange
type Error = DifferentVariant
Source§impl TryFrom<Error> for DifferentVariant
impl TryFrom<Error> for DifferentVariant
type Error = DifferentVariant
Source§impl TryFrom<Error> for InvalidVariant
impl TryFrom<Error> for InvalidVariant
type Error = DifferentVariant
Source§impl TryFrom<Parse> for ParseFromDescription
impl TryFrom<Parse> for ParseFromDescription
type Error = DifferentVariant
Source§impl TryFrom<Parse> for TryFromParsed
impl TryFrom<Parse> for TryFromParsed
type Error = DifferentVariant
Source§impl TryFrom<TryFromParsed> for ComponentRange
impl TryFrom<TryFromParsed> for ComponentRange
type Error = DifferentVariant
Source§impl TryFrom<BorrowedFormatItem<'_>> for Component
impl TryFrom<BorrowedFormatItem<'_>> for Component
type Error = DifferentVariant
Source§impl TryFrom<OwnedFormatItem> for Component
impl TryFrom<OwnedFormatItem> for Component
type Error = DifferentVariant
Source§impl TryFrom<OwnedFormatItem> for Vec<OwnedFormatItem>
impl TryFrom<OwnedFormatItem> for Vec<OwnedFormatItem>
type Error = DifferentVariant
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<u8> for AckDelayExponent
impl TryFrom<u8> for AckDelayExponent
type Error = ValidationError
Source§impl TryFrom<u16> for StatusCode
impl TryFrom<u16> for StatusCode
type Error = InvalidStatusCode
Source§impl TryFrom<u16> for MaxUdpPayloadSize
impl TryFrom<u16> for MaxUdpPayloadSize
type Error = ValidationError
Source§impl TryFrom<u32> for MaxSendBufferSize
impl TryFrom<u32> for MaxSendBufferSize
type Error = ValidationError
Source§impl TryFrom<u64> for s2n_quic_core::application::error::Error
impl TryFrom<u64> for s2n_quic_core::application::error::Error
type Error = VarIntError
Source§impl TryFrom<u64> for LocalBidirectional
impl TryFrom<u64> for LocalBidirectional
type Error = ValidationError
Source§impl TryFrom<u64> for LocalUnidirectional
impl TryFrom<u64> for LocalUnidirectional
type Error = ValidationError
Source§impl TryFrom<u64> for ActiveConnectionIdLimit
impl TryFrom<u64> for ActiveConnectionIdLimit
type Error = ValidationError
Source§impl TryFrom<u64> for InitialMaxData
impl TryFrom<u64> for InitialMaxData
type Error = ValidationError
Source§impl TryFrom<u64> for InitialMaxStreamDataBidiLocal
impl TryFrom<u64> for InitialMaxStreamDataBidiLocal
type Error = ValidationError
Source§impl TryFrom<u64> for InitialMaxStreamDataBidiRemote
impl TryFrom<u64> for InitialMaxStreamDataBidiRemote
type Error = ValidationError
Source§impl TryFrom<u64> for InitialMaxStreamDataUni
impl TryFrom<u64> for InitialMaxStreamDataUni
type Error = ValidationError
Source§impl TryFrom<u64> for InitialMaxStreamsBidi
impl TryFrom<u64> for InitialMaxStreamsBidi
type Error = ValidationError
Source§impl TryFrom<u64> for InitialMaxStreamsUni
impl TryFrom<u64> for InitialMaxStreamsUni
type Error = ValidationError
Source§impl TryFrom<u64> for MaxDatagramFrameSize
impl TryFrom<u64> for MaxDatagramFrameSize
type Error = ValidationError
Source§impl TryFrom<usize> for MaxSegments
impl TryFrom<usize> for MaxSegments
type Error = MaxSegmentsError
Source§impl TryFrom<String> for ServerName<'static>
impl TryFrom<String> for ServerName<'static>
type Error = InvalidDnsNameError
Source§impl TryFrom<String> for HeaderName
impl TryFrom<String> for HeaderName
type Error = InvalidHeaderName
Source§impl TryFrom<String> for HeaderValue
impl TryFrom<String> for HeaderValue
type Error = InvalidHeaderValue
Source§impl TryFrom<String> for PathAndQuery
impl TryFrom<String> for PathAndQuery
type Error = InvalidUri
Source§impl TryFrom<Vec<u8>> for HeaderName
impl TryFrom<Vec<u8>> for HeaderName
type Error = InvalidHeaderName
Source§impl TryFrom<Vec<u8>> for HeaderValue
impl TryFrom<Vec<u8>> for HeaderValue
type Error = InvalidHeaderValue
Source§impl TryFrom<Vec<u8>> for PathAndQuery
impl TryFrom<Vec<u8>> for PathAndQuery
type Error = InvalidUri
Source§impl TryFrom<Duration> for MaxAckDelay
impl TryFrom<Duration> for MaxAckDelay
type Error = ValidationError
Source§impl TryFrom<Duration> for MaxIdleTimeout
impl TryFrom<Duration> for MaxIdleTimeout
type Error = ValidationError
Source§impl TryFrom<TcpListener> for TcpListener
impl TryFrom<TcpListener> for TcpListener
Source§impl TryFrom<UnixDatagram> for UnixDatagram
impl TryFrom<UnixDatagram> for UnixDatagram
Source§impl TryFrom<UnixListener> for UnixListener
impl TryFrom<UnixListener> for UnixListener
Source§impl TryFrom<UnixStream> for UnixStream
impl TryFrom<UnixStream> for UnixStream
Source§impl TryFrom<InitialId> for OriginalDestinationConnectionId
impl TryFrom<InitialId> for OriginalDestinationConnectionId
type Error = ValidationError
Source§impl TryFrom<LocalId> for RetrySourceConnectionId
impl TryFrom<LocalId> for RetrySourceConnectionId
type Error = ValidationError
Source§impl TryFrom<UnboundedId> for InitialSourceConnectionId
impl TryFrom<UnboundedId> for InitialSourceConnectionId
type Error = ValidationError
Source§impl TryFrom<VarInt> for ActiveConnectionIdLimit
impl TryFrom<VarInt> for ActiveConnectionIdLimit
type Error = ValidationError
Source§impl TryFrom<VarInt> for InitialMaxData
impl TryFrom<VarInt> for InitialMaxData
type Error = ValidationError
Source§impl TryFrom<VarInt> for InitialMaxStreamDataBidiLocal
impl TryFrom<VarInt> for InitialMaxStreamDataBidiLocal
type Error = ValidationError
Source§impl TryFrom<VarInt> for InitialMaxStreamDataBidiRemote
impl TryFrom<VarInt> for InitialMaxStreamDataBidiRemote
type Error = ValidationError
Source§impl TryFrom<VarInt> for InitialMaxStreamDataUni
impl TryFrom<VarInt> for InitialMaxStreamDataUni
type Error = ValidationError
Source§impl TryFrom<VarInt> for InitialMaxStreamsBidi
impl TryFrom<VarInt> for InitialMaxStreamsBidi
type Error = ValidationError
Source§impl TryFrom<VarInt> for InitialMaxStreamsUni
impl TryFrom<VarInt> for InitialMaxStreamsUni
type Error = ValidationError
Source§impl TryFrom<VarInt> for MaxAckDelay
impl TryFrom<VarInt> for MaxAckDelay
type Error = ValidationError
Source§impl TryFrom<VarInt> for MaxDatagramFrameSize
impl TryFrom<VarInt> for MaxDatagramFrameSize
type Error = ValidationError
Source§impl TryFrom<VarInt> for MaxIdleTimeout
impl TryFrom<VarInt> for MaxIdleTimeout
type Error = ValidationError
Source§impl TryFrom<VarInt> for MaxUdpPayloadSize
impl TryFrom<VarInt> for MaxUdpPayloadSize
type Error = ValidationError
Source§impl TryFrom<Parsed> for OffsetDateTime
impl TryFrom<Parsed> for OffsetDateTime
type Error = TryFromParsed
Source§impl TryFrom<Parsed> for PrimitiveDateTime
impl TryFrom<Parsed> for PrimitiveDateTime
type Error = TryFromParsed
Source§impl<'a> TryFrom<&'a DecryptionContext> for &'a [u8]
impl<'a> TryFrom<&'a DecryptionContext> for &'a [u8]
type Error = Unspecified
Source§impl<'a> TryFrom<&'a EncryptionContext> for &'a [u8]
impl<'a> TryFrom<&'a EncryptionContext> for &'a [u8]
type Error = Unspecified
Source§impl<'a> TryFrom<&'a str> for ServerName<'a>
impl<'a> TryFrom<&'a str> for ServerName<'a>
Attempt to make a ServerName from a string by parsing as a DNS name or IP address.
type Error = InvalidDnsNameError
Source§impl<'a> TryFrom<&'a str> for HeaderName
impl<'a> TryFrom<&'a str> for HeaderName
type Error = InvalidHeaderName
Source§impl<'a> TryFrom<&'a str> for HeaderValue
impl<'a> TryFrom<&'a str> for HeaderValue
type Error = InvalidHeaderValue
Source§impl<'a> TryFrom<&'a str> for StatusCode
impl<'a> TryFrom<&'a str> for StatusCode
type Error = InvalidStatusCode
Source§impl<'a> TryFrom<&'a str> for PathAndQuery
impl<'a> TryFrom<&'a str> for PathAndQuery
type Error = InvalidUri
Source§impl<'a> TryFrom<&'a CertificateDer<'a>> for EndEntityCert<'a>
impl<'a> TryFrom<&'a CertificateDer<'a>> for EndEntityCert<'a>
Source§impl<'a> TryFrom<&'a CertificateDer<'a>> for ParsedCertificate<'a>
impl<'a> TryFrom<&'a CertificateDer<'a>> for ParsedCertificate<'a>
Source§impl<'a> TryFrom<&'a String> for HeaderName
impl<'a> TryFrom<&'a String> for HeaderName
type Error = InvalidHeaderName
Source§impl<'a> TryFrom<&'a String> for HeaderValue
impl<'a> TryFrom<&'a String> for HeaderValue
type Error = InvalidHeaderValue
Source§impl<'a> TryFrom<&'a SubjectPublicKeyInfoDer<'a>> for RawPublicKeyEntity<'a>
impl<'a> TryFrom<&'a SubjectPublicKeyInfoDer<'a>> for RawPublicKeyEntity<'a>
Source§impl<'a> TryFrom<&'a [u8]> for ServerName<'a>
impl<'a> TryFrom<&'a [u8]> for ServerName<'a>
type Error = InvalidDnsNameError
Source§impl<'a> TryFrom<&'a [u8]> for HeaderName
impl<'a> TryFrom<&'a [u8]> for HeaderName
type Error = InvalidHeaderName
Source§impl<'a> TryFrom<&'a [u8]> for HeaderValue
impl<'a> TryFrom<&'a [u8]> for HeaderValue
type Error = InvalidHeaderValue
Source§impl<'a> TryFrom<&'a [u8]> for StatusCode
impl<'a> TryFrom<&'a [u8]> for StatusCode
type Error = InvalidStatusCode
Source§impl<'a> TryFrom<&'a [u8]> for PathAndQuery
impl<'a> TryFrom<&'a [u8]> for PathAndQuery
type Error = InvalidUri
Source§impl<'a> TryFrom<BorrowedFormatItem<'a>> for &[BorrowedFormatItem<'a>]
impl<'a> TryFrom<BorrowedFormatItem<'a>> for &[BorrowedFormatItem<'a>]
type Error = DifferentVariant
Source§impl<'a, 'b> TryFrom<&'b AlgorithmIdentifier<'a>> for SignatureAlgorithm<'a>
impl<'a, 'b> TryFrom<&'b AlgorithmIdentifier<'a>> for SignatureAlgorithm<'a>
Source§impl<'a, 'b, E, T, const CLASS: u8, const TAG: u32> TryFrom<&'b Any<'a>> for TaggedValue<T, E, Implicit, CLASS, TAG>
impl<'a, 'b, E, T, const CLASS: u8, const TAG: u32> TryFrom<&'b Any<'a>> for TaggedValue<T, E, Implicit, CLASS, TAG>
Source§impl<'a, 'b, T, E, const CLASS: u8, const TAG: u32> TryFrom<&'b Any<'a>> for TaggedValue<T, E, Explicit, CLASS, TAG>
impl<'a, 'b, T, E, const CLASS: u8, const TAG: u32> TryFrom<&'b Any<'a>> for TaggedValue<T, E, Explicit, CLASS, TAG>
Source§impl<'a, K, V, T> TryFrom<&'a HashMap<K, V>> for HeaderMap<T>
impl<'a, K, V, T> TryFrom<&'a HashMap<K, V>> for HeaderMap<T>
Try to convert a HashMap
into a HeaderMap
.
§Examples
use std::collections::HashMap;
use std::convert::TryInto;
use http::HeaderMap;
let mut map = HashMap::new();
map.insert("X-Custom-Header".to_string(), "my value".to_string());
let headers: HeaderMap = (&map).try_into().expect("valid headers");
assert_eq!(headers["X-Custom-Header"], "my value");
Source§impl<'a, T, E, const CLASS: u8, const TAG: u32> TryFrom<Any<'a>> for TaggedValue<T, E, Explicit, CLASS, TAG>
impl<'a, T, E, const CLASS: u8, const TAG: u32> TryFrom<Any<'a>> for TaggedValue<T, E, Explicit, CLASS, TAG>
Source§impl<'a, T, E, const CLASS: u8, const TAG: u32> TryFrom<Any<'a>> for TaggedValue<T, E, Implicit, CLASS, TAG>
impl<'a, T, E, const CLASS: u8, const TAG: u32> TryFrom<Any<'a>> for TaggedValue<T, E, Implicit, CLASS, TAG>
1.34.0 · 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
1.34.0 · 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
Source§impl<'ber, 'a> TryFrom<Any<'ber>> for EcdsaSigValue<'a>where
'ber: 'a,
impl<'ber, 'a> TryFrom<Any<'ber>> for EcdsaSigValue<'a>where
'ber: 'a,
Source§impl<'ber, 'a> TryFrom<Any<'ber>> for AlgorithmIdentifier<'a>where
'ber: 'a,
impl<'ber, 'a> TryFrom<Any<'ber>> for AlgorithmIdentifier<'a>where
'ber: 'a,
Source§impl<'ber, 'a> TryFrom<Any<'ber>> for PolicyMapping<'a>where
'ber: 'a,
impl<'ber, 'a> TryFrom<Any<'ber>> for PolicyMapping<'a>where
'ber: 'a,
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, A, const N: usize> TryFrom<Box<[T], A>> for allocator_api2::stable::boxed::Box<[T; N], A>where
A: Allocator,
impl<T, A, const N: usize> TryFrom<Box<[T], A>> for allocator_api2::stable::boxed::Box<[T; N], A>where
A: Allocator,
1.34.0 · 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));