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 UimpliesTryInto<U> for Ttry_fromis reflexive, which means thatTryFrom<T> for Tis implemented and cannot fail – the associatedErrortype for callingT::try_from()on a value of typeTisInfallible. When the!type is stabilizedInfallibleand!will be equivalent.
Prefer using TryInto over TryFrom when specifying trait bounds on a generic function
to ensure that types that only implement TryInto can be used as well.
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<&Value> for CalendarAlgorithm
impl TryFrom<&Value> for CalendarAlgorithm
Source§impl TryFrom<&Value> for CollationCaseFirst
impl TryFrom<&Value> for CollationCaseFirst
Source§impl TryFrom<&Value> for CollationNumericOrdering
impl TryFrom<&Value> for CollationNumericOrdering
Source§impl TryFrom<&Value> for CollationType
impl TryFrom<&Value> for CollationType
Source§impl TryFrom<&Value> for CurrencyFormatStyle
impl TryFrom<&Value> for CurrencyFormatStyle
Source§impl TryFrom<&Value> for EmojiPresentationStyle
impl TryFrom<&Value> for EmojiPresentationStyle
Source§impl TryFrom<&Value> for LineBreakStyle
impl TryFrom<&Value> for LineBreakStyle
Source§impl TryFrom<&Value> for LineBreakWordHandling
impl TryFrom<&Value> for LineBreakWordHandling
Source§impl TryFrom<&Value> for MeasurementSystem
impl TryFrom<&Value> for MeasurementSystem
Source§impl TryFrom<&Value> for MeasurementUnitOverride
impl TryFrom<&Value> for MeasurementUnitOverride
Source§impl TryFrom<&Value> for SentenceBreakSupressions
impl TryFrom<&Value> for SentenceBreakSupressions
Source§impl TryFrom<&Value> for CommonVariantType
impl TryFrom<&Value> for CommonVariantType
Source§impl TryFrom<&Value> for CurrencyType
impl TryFrom<&Value> for CurrencyType
Source§impl TryFrom<&Value> for NumberingSystem
impl TryFrom<&Value> for NumberingSystem
Source§impl TryFrom<&Value> for RegionOverride
impl TryFrom<&Value> for RegionOverride
Source§impl TryFrom<&Value> for RegionalSubdivision
impl TryFrom<&Value> for RegionalSubdivision
Source§impl TryFrom<&Value> for TimeZoneShortId
impl TryFrom<&Value> for TimeZoneShortId
1.59.0 (const: unstable) · Source§impl TryFrom<char> for u8
Maps a char with a code point from U+0000 to U+00FF (inclusive) to a byte in 0x00..=0xFF with
the same value, failing if the code point is greater than U+00FF.
impl TryFrom<char> for u8
Maps a char with a code point from U+0000 to U+00FF (inclusive) to a byte in 0x00..=0xFF with
the 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 (const: unstable) · Source§impl TryFrom<char> for u16
Maps a char with a code point from U+0000 to U+FFFF (inclusive) to a u16 in 0x0000..=0xFFFF
with the same value, failing if the code point is greater than U+FFFF.
impl TryFrom<char> for u16
Maps a char with a code point from U+0000 to U+FFFF (inclusive) to a u16 in 0x0000..=0xFFFF
with the 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
1.94.0 (const: unstable) · Source§impl TryFrom<char> for usize
Maps a char with a code point from U+0000 to U+10FFFF (inclusive) to a usize in
0x0000..=0x10FFFF with the same value, failing if the final value is unrepresentable by
usize.
impl TryFrom<char> for usize
Maps a char with a code point from U+0000 to U+10FFFF (inclusive) to a usize in
0x0000..=0x10FFFF with the same value, failing if the final value is unrepresentable by
usize.
Generally speaking, this conversion can be seen as obtaining the character’s corresponding UTF-32 code point to the extent representable by pointer addresses.
type Error = TryFromCharError
1.46.0 (const: unstable) · Source§impl TryFrom<i8> for NonZero<i8>
impl TryFrom<i8> for NonZero<i8>
type Error = TryFromIntError
1.46.0 (const: unstable) · Source§impl TryFrom<i16> for NonZero<i16>
impl TryFrom<i16> for NonZero<i16>
type Error = TryFromIntError
1.46.0 (const: unstable) · Source§impl TryFrom<i32> for NonZero<i32>
impl TryFrom<i32> for NonZero<i32>
type Error = TryFromIntError
1.46.0 (const: unstable) · Source§impl TryFrom<i64> for NonZero<i64>
impl TryFrom<i64> for NonZero<i64>
type Error = TryFromIntError
1.46.0 (const: unstable) · Source§impl TryFrom<i128> for NonZero<i128>
impl TryFrom<i128> for NonZero<i128>
type Error = TryFromIntError
1.46.0 (const: unstable) · Source§impl TryFrom<isize> for NonZero<isize>
impl TryFrom<isize> for NonZero<isize>
type Error = TryFromIntError
Source§impl TryFrom<u8> for GeneralCategory
impl TryFrom<u8> for GeneralCategory
1.46.0 (const: unstable) · Source§impl TryFrom<u8> for NonZero<u8>
impl TryFrom<u8> for NonZero<u8>
type Error = TryFromIntError
1.46.0 (const: unstable) · Source§impl TryFrom<u16> for NonZero<u16>
impl TryFrom<u16> for NonZero<u16>
type Error = TryFromIntError
1.46.0 (const: unstable) · Source§impl TryFrom<u32> for NonZero<u32>
impl TryFrom<u32> for NonZero<u32>
type Error = TryFromIntError
1.46.0 (const: unstable) · Source§impl TryFrom<u64> for NonZero<u64>
impl TryFrom<u64> for NonZero<u64>
type Error = TryFromIntError
1.46.0 (const: unstable) · Source§impl TryFrom<u128> for NonZero<u128>
impl TryFrom<u128> for NonZero<u128>
type Error = TryFromIntError
1.46.0 (const: unstable) · Source§impl TryFrom<usize> for NonZero<usize>
impl TryFrom<usize> for NonZero<usize>
type Error = TryFromIntError
Source§impl TryFrom<ByteString> for String
impl TryFrom<ByteString> for String
type Error = FromUtf8Error
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i8>> for NonZero<u8>
impl TryFrom<NonZero<i8>> for NonZero<u8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i8>> for NonZero<u16>
impl TryFrom<NonZero<i8>> for NonZero<u16>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i8>> for NonZero<u32>
impl TryFrom<NonZero<i8>> for NonZero<u32>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i8>> for NonZero<u64>
impl TryFrom<NonZero<i8>> for NonZero<u64>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i8>> for NonZero<u128>
impl TryFrom<NonZero<i8>> for NonZero<u128>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i8>> for NonZero<usize>
impl TryFrom<NonZero<i8>> for NonZero<usize>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i16>> for NonZero<i8>
impl TryFrom<NonZero<i16>> for NonZero<i8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i16>> for NonZero<u8>
impl TryFrom<NonZero<i16>> for NonZero<u8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i16>> for NonZero<u16>
impl TryFrom<NonZero<i16>> for NonZero<u16>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i16>> for NonZero<u32>
impl TryFrom<NonZero<i16>> for NonZero<u32>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i16>> for NonZero<u64>
impl TryFrom<NonZero<i16>> for NonZero<u64>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i16>> for NonZero<u128>
impl TryFrom<NonZero<i16>> for NonZero<u128>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i16>> for NonZero<usize>
impl TryFrom<NonZero<i16>> for NonZero<usize>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i32>> for NonZero<i8>
impl TryFrom<NonZero<i32>> for NonZero<i8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i32>> for NonZero<i16>
impl TryFrom<NonZero<i32>> for NonZero<i16>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i32>> for NonZero<isize>
impl TryFrom<NonZero<i32>> for NonZero<isize>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i32>> for NonZero<u8>
impl TryFrom<NonZero<i32>> for NonZero<u8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i32>> for NonZero<u16>
impl TryFrom<NonZero<i32>> for NonZero<u16>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i32>> for NonZero<u32>
impl TryFrom<NonZero<i32>> for NonZero<u32>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i32>> for NonZero<u64>
impl TryFrom<NonZero<i32>> for NonZero<u64>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i32>> for NonZero<u128>
impl TryFrom<NonZero<i32>> for NonZero<u128>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i32>> for NonZero<usize>
impl TryFrom<NonZero<i32>> for NonZero<usize>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i64>> for NonZero<i8>
impl TryFrom<NonZero<i64>> for NonZero<i8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i64>> for NonZero<i16>
impl TryFrom<NonZero<i64>> for NonZero<i16>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i64>> for NonZero<i32>
impl TryFrom<NonZero<i64>> for NonZero<i32>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i64>> for NonZero<isize>
impl TryFrom<NonZero<i64>> for NonZero<isize>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i64>> for NonZero<u8>
impl TryFrom<NonZero<i64>> for NonZero<u8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i64>> for NonZero<u16>
impl TryFrom<NonZero<i64>> for NonZero<u16>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i64>> for NonZero<u32>
impl TryFrom<NonZero<i64>> for NonZero<u32>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i64>> for NonZero<u64>
impl TryFrom<NonZero<i64>> for NonZero<u64>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i64>> for NonZero<u128>
impl TryFrom<NonZero<i64>> for NonZero<u128>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i64>> for NonZero<usize>
impl TryFrom<NonZero<i64>> for NonZero<usize>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i128>> for NonZero<i8>
impl TryFrom<NonZero<i128>> for NonZero<i8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i128>> for NonZero<i16>
impl TryFrom<NonZero<i128>> for NonZero<i16>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i128>> for NonZero<i32>
impl TryFrom<NonZero<i128>> for NonZero<i32>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i128>> for NonZero<i64>
impl TryFrom<NonZero<i128>> for NonZero<i64>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i128>> for NonZero<isize>
impl TryFrom<NonZero<i128>> for NonZero<isize>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i128>> for NonZero<u8>
impl TryFrom<NonZero<i128>> for NonZero<u8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i128>> for NonZero<u16>
impl TryFrom<NonZero<i128>> for NonZero<u16>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i128>> for NonZero<u32>
impl TryFrom<NonZero<i128>> for NonZero<u32>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i128>> for NonZero<u64>
impl TryFrom<NonZero<i128>> for NonZero<u64>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i128>> for NonZero<u128>
impl TryFrom<NonZero<i128>> for NonZero<u128>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<i128>> for NonZero<usize>
impl TryFrom<NonZero<i128>> for NonZero<usize>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<isize>> for NonZero<i8>
impl TryFrom<NonZero<isize>> for NonZero<i8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<isize>> for NonZero<i16>
impl TryFrom<NonZero<isize>> for NonZero<i16>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<isize>> for NonZero<i32>
impl TryFrom<NonZero<isize>> for NonZero<i32>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<isize>> for NonZero<i64>
impl TryFrom<NonZero<isize>> for NonZero<i64>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<isize>> for NonZero<i128>
impl TryFrom<NonZero<isize>> for NonZero<i128>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<isize>> for NonZero<u8>
impl TryFrom<NonZero<isize>> for NonZero<u8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<isize>> for NonZero<u16>
impl TryFrom<NonZero<isize>> for NonZero<u16>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<isize>> for NonZero<u32>
impl TryFrom<NonZero<isize>> for NonZero<u32>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<isize>> for NonZero<u64>
impl TryFrom<NonZero<isize>> for NonZero<u64>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<isize>> for NonZero<u128>
impl TryFrom<NonZero<isize>> for NonZero<u128>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<isize>> for NonZero<usize>
impl TryFrom<NonZero<isize>> for NonZero<usize>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u8>> for NonZero<i8>
impl TryFrom<NonZero<u8>> for NonZero<i8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u16>> for NonZero<i8>
impl TryFrom<NonZero<u16>> for NonZero<i8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u16>> for NonZero<i16>
impl TryFrom<NonZero<u16>> for NonZero<i16>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u16>> for NonZero<isize>
impl TryFrom<NonZero<u16>> for NonZero<isize>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u16>> for NonZero<u8>
impl TryFrom<NonZero<u16>> for NonZero<u8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u32>> for NonZero<i8>
impl TryFrom<NonZero<u32>> for NonZero<i8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u32>> for NonZero<i16>
impl TryFrom<NonZero<u32>> for NonZero<i16>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u32>> for NonZero<i32>
impl TryFrom<NonZero<u32>> for NonZero<i32>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u32>> for NonZero<isize>
impl TryFrom<NonZero<u32>> for NonZero<isize>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u32>> for NonZero<u8>
impl TryFrom<NonZero<u32>> for NonZero<u8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u32>> for NonZero<u16>
impl TryFrom<NonZero<u32>> for NonZero<u16>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u32>> for NonZero<usize>
impl TryFrom<NonZero<u32>> for NonZero<usize>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u64>> for NonZero<i8>
impl TryFrom<NonZero<u64>> for NonZero<i8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u64>> for NonZero<i16>
impl TryFrom<NonZero<u64>> for NonZero<i16>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u64>> for NonZero<i32>
impl TryFrom<NonZero<u64>> for NonZero<i32>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u64>> for NonZero<i64>
impl TryFrom<NonZero<u64>> for NonZero<i64>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u64>> for NonZero<isize>
impl TryFrom<NonZero<u64>> for NonZero<isize>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u64>> for NonZero<u8>
impl TryFrom<NonZero<u64>> for NonZero<u8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u64>> for NonZero<u16>
impl TryFrom<NonZero<u64>> for NonZero<u16>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u64>> for NonZero<u32>
impl TryFrom<NonZero<u64>> for NonZero<u32>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u64>> for NonZero<usize>
impl TryFrom<NonZero<u64>> for NonZero<usize>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u128>> for NonZero<i8>
impl TryFrom<NonZero<u128>> for NonZero<i8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u128>> for NonZero<i16>
impl TryFrom<NonZero<u128>> for NonZero<i16>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u128>> for NonZero<i32>
impl TryFrom<NonZero<u128>> for NonZero<i32>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u128>> for NonZero<i64>
impl TryFrom<NonZero<u128>> for NonZero<i64>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u128>> for NonZero<i128>
impl TryFrom<NonZero<u128>> for NonZero<i128>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u128>> for NonZero<isize>
impl TryFrom<NonZero<u128>> for NonZero<isize>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u128>> for NonZero<u8>
impl TryFrom<NonZero<u128>> for NonZero<u8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u128>> for NonZero<u16>
impl TryFrom<NonZero<u128>> for NonZero<u16>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u128>> for NonZero<u32>
impl TryFrom<NonZero<u128>> for NonZero<u32>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u128>> for NonZero<u64>
impl TryFrom<NonZero<u128>> for NonZero<u64>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<u128>> for NonZero<usize>
impl TryFrom<NonZero<u128>> for NonZero<usize>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<usize>> for NonZero<i8>
impl TryFrom<NonZero<usize>> for NonZero<i8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<usize>> for NonZero<i16>
impl TryFrom<NonZero<usize>> for NonZero<i16>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<usize>> for NonZero<i32>
impl TryFrom<NonZero<usize>> for NonZero<i32>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<usize>> for NonZero<i64>
impl TryFrom<NonZero<usize>> for NonZero<i64>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<usize>> for NonZero<i128>
impl TryFrom<NonZero<usize>> for NonZero<i128>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<usize>> for NonZero<isize>
impl TryFrom<NonZero<usize>> for NonZero<isize>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<usize>> for NonZero<u8>
impl TryFrom<NonZero<usize>> for NonZero<u8>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<usize>> for NonZero<u16>
impl TryFrom<NonZero<usize>> for NonZero<u16>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<usize>> for NonZero<u32>
impl TryFrom<NonZero<usize>> for NonZero<u32>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<usize>> for NonZero<u64>
impl TryFrom<NonZero<usize>> for NonZero<u64>
type Error = TryFromIntError
1.49.0 (const: unstable) · Source§impl TryFrom<NonZero<usize>> for NonZero<u128>
impl TryFrom<NonZero<usize>> for NonZero<u128>
type Error = TryFromIntError
Source§impl TryFrom<Duration> for SignedDuration
Fallibly converts a std::time::Duration to a SignedDuration.
impl TryFrom<Duration> for SignedDuration
Fallibly converts a std::time::Duration to a SignedDuration.
§Errors
This fails when the duration’s second component exceeds i64::MAX.
§Examples
use std::time::Duration;
use jiff::SignedDuration;
let dur = Duration::new(5, 123_000_000);
let sdur = SignedDuration::try_from(dur)?;
assert_eq!(sdur, SignedDuration::new(5, 123_000_000));
let dur = Duration::new(i64::MAX as u64, 999_999_999);
let sdur = SignedDuration::try_from(dur)?;
assert_eq!(sdur, SignedDuration::new(i64::MAX, 999_999_999));
// Some failure cases:
assert!(SignedDuration::try_from(Duration::new(i64::MAX as u64 + 1, 0)).is_err());
assert!(SignedDuration::try_from(Duration::new(u64::MAX, 0)).is_err());
Source§impl TryFrom<Duration> for Span
Converts a std::time::Duration to a Span.
impl TryFrom<Duration> for Span
Converts a std::time::Duration to a Span.
The span returned from this conversion will only ever have non-zero units of seconds or smaller.
§Errors
This only fails when the given Duration overflows the maximum number of
seconds representable by a Span.
§Example
This shows a basic conversion:
use std::time::Duration;
use jiff::{Span, ToSpan};
let duration = Duration::new(86_400, 123_456_789);
let span = Span::try_from(duration)?;
// A duration-to-span conversion always results in a span with
// non-zero units no bigger than seconds.
assert_eq!(
span.fieldwise(),
86_400.seconds().milliseconds(123).microseconds(456).nanoseconds(789),
);
§Example: rounding
This example shows how to convert a Duration to a Span, and then round
it up to bigger units given a relative date:
use std::time::Duration;
use jiff::{civil::date, Span, SpanRound, ToSpan, Unit};
let duration = Duration::new(450 * 86_401, 0);
let span = Span::try_from(duration)?;
// We get back a simple span of just seconds:
assert_eq!(span.fieldwise(), Span::new().seconds(450 * 86_401));
// But we can balance it up to bigger units:
let options = SpanRound::new()
.largest(Unit::Year)
.relative(date(2024, 1, 1));
assert_eq!(
span.round(options)?,
1.year().months(2).days(25).minutes(7).seconds(30).fieldwise(),
);
Source§impl TryFrom<OsString> for Utf8PathBuf
impl TryFrom<OsString> for Utf8PathBuf
type Error = FromOsStringError
Source§impl TryFrom<PathBuf> for Utf8PathBuf
impl TryFrom<PathBuf> for Utf8PathBuf
type Error = FromPathBufError
Source§impl TryFrom<SystemTime> for Timestamp
Available on crate feature std only.
impl TryFrom<SystemTime> for Timestamp
std only.Source§impl TryFrom<SystemTime> for Zoned
Available on crate feature std only.
impl TryFrom<SystemTime> for Zoned
std only.Source§impl TryFrom<Value> for CurrencyType
impl TryFrom<Value> for CurrencyType
Source§impl TryFrom<Value> for NumberingSystem
impl TryFrom<Value> for NumberingSystem
Source§impl TryFrom<Value> for RegionOverride
impl TryFrom<Value> for RegionOverride
Source§impl TryFrom<Value> for RegionalSubdivision
impl TryFrom<Value> for RegionalSubdivision
Source§impl TryFrom<Value> for TimeZoneShortId
impl TryFrom<Value> for TimeZoneShortId
Source§impl TryFrom<SignedDuration> for Duration
Fallibly converts a SignedDuration to a std::time::Duration.
impl TryFrom<SignedDuration> for Duration
Fallibly converts a SignedDuration to a std::time::Duration.
§Errors
This fails when the signed duration is negative.
§Examples
use std::time::Duration;
use jiff::SignedDuration;
let sdur = SignedDuration::new(5, 123_000_000);
let dur = Duration::try_from(sdur)?;
assert_eq!(dur, Duration::new(5, 123_000_000));
// Some failure cases:
assert!(Duration::try_from(SignedDuration::new(-5, 0)).is_err());
assert!(Duration::try_from(SignedDuration::new(-5, -1)).is_err());
assert!(Duration::try_from(SignedDuration::new(0, -1)).is_err());
Source§impl TryFrom<SignedDuration> for Span
Converts a SignedDuration to a Span.
impl TryFrom<SignedDuration> for Span
Converts a SignedDuration to a Span.
The span returned from this conversion will only ever have non-zero units of seconds or smaller.
§Errors
This only fails when the given SignedDuration overflows the maximum
number of seconds representable by a Span.
§Example
This shows a basic conversion:
use jiff::{SignedDuration, Span, ToSpan};
let duration = SignedDuration::new(86_400, 123_456_789);
let span = Span::try_from(duration)?;
// A duration-to-span conversion always results in a span with
// non-zero units no bigger than seconds.
assert_eq!(
span.fieldwise(),
86_400.seconds().milliseconds(123).microseconds(456).nanoseconds(789),
);
§Example: rounding
This example shows how to convert a SignedDuration to a Span, and then
round it up to bigger units given a relative date:
use jiff::{civil::date, SignedDuration, Span, SpanRound, ToSpan, Unit};
let duration = SignedDuration::new(450 * 86_401, 0);
let span = Span::try_from(duration)?;
// We get back a simple span of just seconds:
assert_eq!(span.fieldwise(), Span::new().seconds(450 * 86_401));
// But we can balance it up to bigger units:
let options = SpanRound::new()
.largest(Unit::Year)
.relative(date(2024, 1, 1));
assert_eq!(
span.round(options)?,
1.year().months(2).days(25).minutes(7).seconds(30).fieldwise(),
);
Source§impl TryFrom<SignedDuration> for Offset
Converts a SignedDuration to a time zone offset.
impl TryFrom<SignedDuration> for Offset
Converts a SignedDuration to a time zone offset.
If the signed duration has fractional seconds, then it is automatically
rounded to the nearest second. (Because an Offset has only second
precision.)
§Errors
This returns an error if the duration overflows the limits of an Offset.
§Example
use jiff::{tz::{self, Offset}, SignedDuration};
let sdur = SignedDuration::from_secs(-5 * 60 * 60);
let offset = Offset::try_from(sdur)?;
assert_eq!(offset, tz::offset(-5));
// Sub-seconds results in rounded.
let sdur = SignedDuration::new(-5 * 60 * 60, -500_000_000);
let offset = Offset::try_from(sdur)?;
assert_eq!(offset, tz::Offset::from_seconds(-(5 * 60 * 60 + 1)).unwrap());
Source§impl TryFrom<Span> for Duration
Converts a Span to a std::time::Duration.
impl TryFrom<Span> for Duration
Converts a Span to a std::time::Duration.
§Errors
This can fail for only two reasons:
- The span is negative. This is an error because a
std::time::Durationis unsigned.) - The span has any non-zero units greater than hours. This is an error because it’s impossible to determine the length of, e.g., a month without a reference date.
This can never result in overflow because a Duration can represent a
bigger span of time than Span when limited to units of hours or lower.
If you need to convert a Span to a Duration that has non-zero
units bigger than hours, then please use Span::to_duration with a
corresponding relative date.
§Example: maximal span
This example shows the maximum possible span using units of hours or
smaller, and the corresponding Duration value:
use std::time::Duration;
use jiff::Span;
let sp = Span::new()
.hours(175_307_616)
.minutes(10_518_456_960i64)
.seconds(631_107_417_600i64)
.milliseconds(631_107_417_600_000i64)
.microseconds(631_107_417_600_000_000i64)
.nanoseconds(9_223_372_036_854_775_807i64);
let duration = Duration::try_from(sp)?;
assert_eq!(duration, Duration::new(3_164_760_460_036, 854_775_807));
§Example: converting a negative span
Since a Span is signed and a Duration is unsigned, converting
a negative Span to Duration will always fail. One can use
Span::signum to get the sign of the span and Span::abs to make the
span positive before converting it to a Duration:
use std::time::Duration;
use jiff::{Span, ToSpan};
let span = -86_400.seconds().nanoseconds(1);
let (sign, duration) = (span.signum(), Duration::try_from(span.abs())?);
assert_eq!((sign, duration), (-1, Duration::new(86_400, 1)));
Source§impl TryFrom<Span> for SignedDuration
Converts a Span to a SignedDuration.
impl TryFrom<Span> for SignedDuration
Converts a Span to a SignedDuration.
§Errors
This can fail for only when the span has any non-zero units greater than hours. This is an error because it’s impossible to determine the length of, e.g., a month without a reference date.
This can never result in overflow because a SignedDuration can represent
a bigger span of time than Span when limited to units of hours or lower.
If you need to convert a Span to a SignedDuration that has non-zero
units bigger than hours, then please use Span::to_duration with a
corresponding relative date.
§Example: maximal span
This example shows the maximum possible span using units of hours or
smaller, and the corresponding SignedDuration value:
use jiff::{SignedDuration, Span};
let sp = Span::new()
.hours(175_307_616)
.minutes(10_518_456_960i64)
.seconds(631_107_417_600i64)
.milliseconds(631_107_417_600_000i64)
.microseconds(631_107_417_600_000_000i64)
.nanoseconds(9_223_372_036_854_775_807i64);
let duration = SignedDuration::try_from(sp)?;
assert_eq!(duration, SignedDuration::new(3_164_760_460_036, 854_775_807));
Source§impl TryFrom<PotentialCodePoint> for char
impl TryFrom<PotentialCodePoint> for char
type Error = CharTryFromError
Source§impl<'a> TryFrom<&'a OsStr> for &'a Utf8Path
impl<'a> TryFrom<&'a OsStr> for &'a Utf8Path
Returns the original OsStr if it is not valid UTF-8.
§Examples
use camino::Utf8Path;
use std::convert::TryFrom;
use std::ffi::OsStr;
use std::os::unix::ffi::OsStrExt;
use std::path::Path;
let non_unicode_str = OsStr::from_bytes(b"\xFF\xFF\xFF");
assert!(<&Utf8Path>::try_from(non_unicode_str).is_err(), "non-Unicode string path failed");type Error = FromOsStrError
Source§impl<'a> TryFrom<&'a Path> for &'a Utf8Path
impl<'a> TryFrom<&'a Path> for &'a Utf8Path
Returns FromPathError if the path is not valid UTF-8.
§Examples
use camino::Utf8Path;
use std::convert::TryFrom;
use std::ffi::OsStr;
use std::os::unix::ffi::OsStrExt;
use std::path::Path;
let unicode_path = Path::new("/valid/unicode");
<&Utf8Path>::try_from(unicode_path).expect("valid Unicode path succeeded");
// Paths on Unix can be non-UTF-8.
let non_unicode_str = OsStr::from_bytes(b"\xFF\xFF\xFF");
let non_unicode_path = Path::new(non_unicode_str);
assert!(<&Utf8Path>::try_from(non_unicode_path).is_err(), "non-Unicode path failed");type Error = FromPathError
1.34.0 (const: unstable) · 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 (const: unstable) · 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
Source§impl<'trie, T> TryFrom<&'trie CodePointTrie<'trie, T>> for &'trie FastCodePointTrie<'trie, T>where
T: TrieValue,
impl<'trie, T> TryFrom<&'trie CodePointTrie<'trie, T>> for &'trie FastCodePointTrie<'trie, T>where
T: TrieValue,
Source§impl<'trie, T> TryFrom<&'trie CodePointTrie<'trie, T>> for &'trie SmallCodePointTrie<'trie, T>where
T: TrieValue,
impl<'trie, T> TryFrom<&'trie CodePointTrie<'trie, T>> for &'trie SmallCodePointTrie<'trie, T>where
T: TrieValue,
Source§impl<'trie, T> TryFrom<CodePointTrie<'trie, T>> for FastCodePointTrie<'trie, T>where
T: TrieValue,
impl<'trie, T> TryFrom<CodePointTrie<'trie, T>> for FastCodePointTrie<'trie, T>where
T: TrieValue,
Source§impl<'trie, T> TryFrom<CodePointTrie<'trie, T>> for SmallCodePointTrie<'trie, T>where
T: TrieValue,
impl<'trie, T> TryFrom<CodePointTrie<'trie, T>> for SmallCodePointTrie<'trie, T>where
T: TrieValue,
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 (const: unstable) · Source§impl<T, U> TryFrom<U> for Twhere
U: Into<T>,
impl<T, U> TryFrom<U> for Twhere
U: Into<T>,
type Error = Infallible
1.34.0 (const: unstable) · 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
Source§impl<T, const N: usize> TryFrom<&[T]> for Simd<T, N>where
T: SimdElement,
impl<T, const N: usize> TryFrom<&[T]> for Simd<T, N>where
T: SimdElement,
type Error = TryFromSliceError
1.59.0 (const: unstable) · 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));type Error = TryFromSliceError
Source§impl<T, const N: usize> TryFrom<&mut [T]> for Simd<T, N>where
T: SimdElement,
impl<T, const N: usize> TryFrom<&mut [T]> for Simd<T, N>where
T: SimdElement,
type Error = TryFromSliceError
1.66.0 · Source§impl<T, const N: usize> TryFrom<Vec<T>> for Box<[T; N]>
Available on non-no_global_oom_handling only.
impl<T, const N: usize> TryFrom<Vec<T>> for Box<[T; N]>
no_global_oom_handling only.