pub trait TryFrom<T>: Sized {
type Error;
// Required method
fn try_from(value: T) -> Result<Self, Self::Error> ⓘ;
}
Expand description
core
Simple and safe type conversions that may fail in a controlled way.
Re-exported from core
::convert::
.
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§
§impl TryFrom<&DecapsulationKey> for devela::_dep::orion::hazardous::kem::mlkem512::EncapsulationKey
impl TryFrom<&DecapsulationKey> for devela::_dep::orion::hazardous::kem::mlkem512::EncapsulationKey
type Error = UnknownCryptoError
§impl TryFrom<&DecapsulationKey> for devela::_dep::orion::hazardous::kem::mlkem768::EncapsulationKey
impl TryFrom<&DecapsulationKey> for devela::_dep::orion::hazardous::kem::mlkem768::EncapsulationKey
type Error = UnknownCryptoError
§impl TryFrom<&DecapsulationKey> for devela::_dep::orion::hazardous::kem::mlkem1024::EncapsulationKey
impl TryFrom<&DecapsulationKey> for devela::_dep::orion::hazardous::kem::mlkem1024::EncapsulationKey
type Error = UnknownCryptoError
§impl TryFrom<&Seed> for devela::_dep::orion::hazardous::kem::mlkem512::KeyPair
impl TryFrom<&Seed> for devela::_dep::orion::hazardous::kem::mlkem512::KeyPair
type Error = UnknownCryptoError
§impl TryFrom<&Seed> for devela::_dep::orion::hazardous::kem::mlkem768::KeyPair
impl TryFrom<&Seed> for devela::_dep::orion::hazardous::kem::mlkem768::KeyPair
type Error = UnknownCryptoError
§impl TryFrom<&Seed> for devela::_dep::orion::hazardous::kem::mlkem1024::KeyPair
impl TryFrom<&Seed> for devela::_dep::orion::hazardous::kem::mlkem1024::KeyPair
type Error = UnknownCryptoError
§impl TryFrom<&Seed> for devela::_dep::orion::hazardous::kem::xwing::KeyPair
impl TryFrom<&Seed> for devela::_dep::orion::hazardous::kem::xwing::KeyPair
type Error = UnknownCryptoError
§impl TryFrom<&PrivateKey> for PublicKey
impl TryFrom<&PrivateKey> for PublicKey
type Error = UnknownCryptoError
§impl TryFrom<&String> for PathAndQuery
impl TryFrom<&String> for PathAndQuery
type Error = InvalidUri
§impl TryFrom<&[u8]> for devela::_dep::orion::aead::streaming::Nonce
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for devela::_dep::orion::aead::streaming::Nonce
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for devela::_dep::orion::auth::Tag
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for devela::_dep::orion::auth::Tag
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for devela::_dep::orion::hash::Digest
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for devela::_dep::orion::hash::Digest
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::aead::chacha20poly1305::Nonce
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::aead::chacha20poly1305::Nonce
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::hash::sha2::sha256::Digest
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::hash::sha2::sha256::Digest
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::hash::sha2::sha384::Digest
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::hash::sha2::sha384::Digest
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::hash::sha2::sha512::Digest
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::hash::sha2::sha512::Digest
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::hash::sha3::sha3_224::Digest
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::hash::sha3::sha3_224::Digest
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::hash::sha3::sha3_256::Digest
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::hash::sha3::sha3_256::Digest
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::hash::sha3::sha3_384::Digest
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::hash::sha3::sha3_384::Digest
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::hash::sha3::sha3_512::Digest
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::hash::sha3::sha3_512::Digest
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::kem::mlkem512::Ciphertext
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::kem::mlkem512::Ciphertext
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::kem::mlkem768::Ciphertext
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::kem::mlkem768::Ciphertext
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::kem::mlkem1024::Ciphertext
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::kem::mlkem1024::Ciphertext
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::kem::xwing::Ciphertext
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::kem::xwing::Ciphertext
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::kem::xwing::EncapsulationKey
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::kem::xwing::EncapsulationKey
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::mac::hmac::sha256::Tag
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::mac::hmac::sha256::Tag
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::mac::hmac::sha384::Tag
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::mac::hmac::sha384::Tag
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::mac::hmac::sha512::Tag
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::mac::hmac::sha512::Tag
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::mac::poly1305::Tag
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for devela::_dep::orion::hazardous::mac::poly1305::Tag
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for Salt
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for Salt
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<&[u8]> for PublicKey
Delegates to from_slice
implementation
impl TryFrom<&[u8]> for PublicKey
Delegates to from_slice
implementation
type Error = UnknownCryptoError
§impl TryFrom<PixelFormatEnum> for devela::_dep::sdl2::pixels::PixelFormat
impl TryFrom<PixelFormatEnum> for devela::_dep::sdl2::pixels::PixelFormat
Source§impl TryFrom<InvalidText> for InvalidChar
impl TryFrom<InvalidText> for InvalidChar
Source§impl TryFrom<InvalidText> for InvalidUtf8
impl TryFrom<InvalidText> for InvalidUtf8
Source§impl TryFrom<InvalidText> for MismatchedCapacity
impl TryFrom<InvalidText> for MismatchedCapacity
Source§impl TryFrom<TextError> for InvalidText
Available on crate feature error
and text··
only.
impl TryFrom<TextError> for InvalidText
error
and text··
only.Source§impl TryFrom<TextError> for InvalidChar
Available on crate feature error
and text··
only.
impl TryFrom<TextError> for InvalidChar
error
and text··
only.Source§impl TryFrom<TextError> for InvalidUtf8
Available on crate feature error
and text··
only.
impl TryFrom<TextError> for InvalidUtf8
error
and text··
only.Source§impl TryFrom<TextError> for ElementNotFound
Available on crate feature error
and text··
only.
impl TryFrom<TextError> for ElementNotFound
error
and text··
only.Source§impl TryFrom<TextError> for MismatchedCapacity
Available on crate feature error
and text··
only.
impl TryFrom<TextError> for MismatchedCapacity
error
and text··
only.Source§impl TryFrom<DataError> for DataNotEnough
Available on crate feature error
and data··
only.
impl TryFrom<DataError> for DataNotEnough
error
and data··
only.Source§impl TryFrom<DataError> for MismatchedBounds
Available on crate feature error
and data··
only.
impl TryFrom<DataError> for MismatchedBounds
error
and data··
only.Source§impl TryFrom<DataError> for NotAvailable
Available on crate feature error
and data··
only.
impl TryFrom<DataError> for NotAvailable
error
and data··
only.Source§impl TryFrom<DataError> for PartialSpace
Available on crate feature error
and data··
only.
impl TryFrom<DataError> for PartialSpace
error
and data··
only.Source§impl TryFrom<DataError> for DataOverflow
Available on crate feature error
and data··
only.
impl TryFrom<DataError> for DataOverflow
error
and data··
only.Source§impl TryFrom<DataError> for ElementNotFound
Available on crate feature error
and data··
only.
impl TryFrom<DataError> for ElementNotFound
error
and data··
only.Source§impl TryFrom<DataError> for IndexOutOfBounds
Available on crate feature error
and data··
only.
impl TryFrom<DataError> for IndexOutOfBounds
error
and data··
only.Source§impl TryFrom<DataError> for InvalidAxisLength
Available on crate feature error
and data··
only.
impl TryFrom<DataError> for InvalidAxisLength
error
and data··
only.Source§impl TryFrom<DataError> for KeyAlreadyExists
Available on crate feature error
and data··
only.
impl TryFrom<DataError> for KeyAlreadyExists
error
and data··
only.Source§impl TryFrom<DataError> for MismatchedCapacity
Available on crate feature error
and data··
only.
impl TryFrom<DataError> for MismatchedCapacity
error
and data··
only.Source§impl TryFrom<DataError> for MismatchedDimensions
Available on crate feature error
and data··
only.
impl TryFrom<DataError> for MismatchedDimensions
error
and data··
only.Source§impl TryFrom<DataError> for MismatchedIndices
Available on crate feature error
and data··
only.
impl TryFrom<DataError> for MismatchedIndices
error
and data··
only.Source§impl TryFrom<DataError> for NodeLinkNotSet
Available on crate feature error
and data··
only.
impl TryFrom<DataError> for NodeLinkNotSet
error
and data··
only.Source§impl TryFrom<DataError> for NodeLinkNotUnique
Available on crate feature error
and data··
only.
impl TryFrom<DataError> for NodeLinkNotUnique
error
and data··
only.Source§impl TryFrom<DataError> for NotEnoughElements
Available on crate feature error
and data··
only.
impl TryFrom<DataError> for NotEnoughElements
error
and data··
only.Source§impl TryFrom<DataError> for NotEnoughSpace
Available on crate feature error
and data··
only.
impl TryFrom<DataError> for NotEnoughSpace
error
and data··
only.Source§impl TryFrom<DataError> for NotImplemented
Available on crate feature error
and data··
only.
impl TryFrom<DataError> for NotImplemented
error
and data··
only.Source§impl TryFrom<DataError> for NotSupported
Available on crate feature error
and data··
only.
impl TryFrom<DataError> for NotSupported
error
and data··
only.Source§impl TryFrom<DataError> for PartiallyAdded
Available on crate feature error
and data··
only.
impl TryFrom<DataError> for PartiallyAdded
error
and data··
only.Source§impl TryFrom<DataNotEnough> for NotEnoughElements
impl TryFrom<DataNotEnough> for NotEnoughElements
Source§impl TryFrom<DataNotEnough> for NotEnoughSpace
impl TryFrom<DataNotEnough> for NotEnoughSpace
Source§impl TryFrom<MismatchedBounds> for DataOverflow
impl TryFrom<MismatchedBounds> for DataOverflow
Source§impl TryFrom<MismatchedBounds> for IndexOutOfBounds
impl TryFrom<MismatchedBounds> for IndexOutOfBounds
Source§impl TryFrom<MismatchedBounds> for MismatchedCapacity
impl TryFrom<MismatchedBounds> for MismatchedCapacity
Source§impl TryFrom<MismatchedBounds> for MismatchedIndices
impl TryFrom<MismatchedBounds> for MismatchedIndices
Source§impl TryFrom<NotAvailable> for NotImplemented
impl TryFrom<NotAvailable> for NotImplemented
Source§impl TryFrom<NotAvailable> for NotSupported
impl TryFrom<NotAvailable> for NotSupported
Source§impl TryFrom<PartialSpace> for NotEnoughSpace
impl TryFrom<PartialSpace> for NotEnoughSpace
Source§impl TryFrom<PartialSpace> for PartiallyAdded
impl TryFrom<PartialSpace> for PartiallyAdded
Source§impl TryFrom<TimeError> for DataOverflow
Available on crate features error
and time
only.
impl TryFrom<TimeError> for DataOverflow
error
and time
only.Source§impl TryFrom<TimeError> for SystemTimeError
Available on crate features error
and time
only.
impl TryFrom<TimeError> for SystemTimeError
error
and time
only.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<i8> for UnixTimeU32
impl TryFrom<i8> for UnixTimeU32
type Error = TryFromIntError
Source§impl TryFrom<i16> for UnixTimeU32
impl TryFrom<i16> for UnixTimeU32
type Error = TryFromIntError
Source§impl TryFrom<i32> for UnixTimeU32
impl TryFrom<i32> for UnixTimeU32
type Error = TryFromIntError
Source§impl TryFrom<i64> for UnixTimeU32
impl TryFrom<i64> for UnixTimeU32
type Error = TryFromIntError
Source§impl TryFrom<i128> for UnixTimeI64
impl TryFrom<i128> for UnixTimeI64
type Error = TryFromIntError
Source§impl TryFrom<i128> for UnixTimeU32
impl TryFrom<i128> for UnixTimeU32
type Error = TryFromIntError
Source§impl TryFrom<isize> for UnixTimeI64
impl TryFrom<isize> for UnixTimeI64
type Error = TryFromIntError
Source§impl TryFrom<isize> for UnixTimeU32
impl TryFrom<isize> for UnixTimeU32
type Error = TryFromIntError
§impl TryFrom<u16> for StatusCode
impl TryFrom<u16> for StatusCode
type Error = InvalidStatusCode
§impl TryFrom<u32> for devela::_dep::sdl3::render::TextureAccess
impl TryFrom<u32> for devela::_dep::sdl3::render::TextureAccess
type Error = InvalidTextureAccess
Source§impl TryFrom<u64> for UnixTimeI64
impl TryFrom<u64> for UnixTimeI64
type Error = TryFromIntError
Source§impl TryFrom<u64> for UnixTimeU32
impl TryFrom<u64> for UnixTimeU32
type Error = TryFromIntError
Source§impl TryFrom<u128> for UnixTimeI64
impl TryFrom<u128> for UnixTimeI64
type Error = TryFromIntError
Source§impl TryFrom<u128> for UnixTimeU32
impl TryFrom<u128> for UnixTimeU32
type Error = TryFromIntError
Source§impl TryFrom<usize> for UnixTimeI64
impl TryFrom<usize> for UnixTimeI64
type Error = TryFromIntError
Source§impl TryFrom<usize> for UnixTimeU32
impl TryFrom<usize> for UnixTimeU32
type Error = TryFromIntError
Source§impl TryFrom<ByteString> for String
impl TryFrom<ByteString> for String
type Error = FromUtf8Error
§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(),
);
§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());
§impl TryFrom<Span> for SignedDuration
Converts a Span
to a SignedDuration
.
impl TryFrom<Span> for SignedDuration
Converts a Span
to a SignedDuration
.
Note that this assumes that days are always 24 hours long.
§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));
§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
.
Note that this assumes that days are always 24 hours long.
§Errors
This can fail for only two reasons:
- The span is negative. This is an error because a
std::time::Duration
is 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)));
§impl TryFrom<SDL_PixelFormat> for devela::_dep::sdl3::pixels::PixelFormat
impl TryFrom<SDL_PixelFormat> for devela::_dep::sdl3::pixels::PixelFormat
§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(),
);
§impl TryFrom<String> for HeaderName
impl TryFrom<String> for HeaderName
type Error = InvalidHeaderName
§impl TryFrom<String> for HeaderValue
impl TryFrom<String> for HeaderValue
type Error = InvalidHeaderValue
§impl TryFrom<String> for PathAndQuery
impl TryFrom<String> for PathAndQuery
type Error = InvalidUri
Source§impl TryFrom<SystemTime> for UnixTimeI64
impl TryFrom<SystemTime> for UnixTimeI64
type Error = SystemTimeError
Source§impl TryFrom<SystemTime> for UnixTimeU32
Available on crate features cast
and error
only.
impl TryFrom<SystemTime> for UnixTimeU32
cast
and error
only.Source§impl TryFrom<UnixTimeI64> for UnixTimeU32
impl TryFrom<UnixTimeI64> for UnixTimeU32
type Error = TryFromIntError
§impl TryFrom<Vec<u8>> for HeaderName
impl TryFrom<Vec<u8>> for HeaderName
type Error = InvalidHeaderName
§impl TryFrom<Vec<u8>> for HeaderValue
impl TryFrom<Vec<u8>> for HeaderValue
type Error = InvalidHeaderValue
§impl TryFrom<Vec<u8>> for PathAndQuery
impl TryFrom<Vec<u8>> for PathAndQuery
type Error = InvalidUri
§impl<'a> TryFrom<&'a str> for HeaderName
impl<'a> TryFrom<&'a str> for HeaderName
type Error = InvalidHeaderName
§impl<'a> TryFrom<&'a str> for HeaderValue
impl<'a> TryFrom<&'a str> for HeaderValue
type Error = InvalidHeaderValue
§impl<'a> TryFrom<&'a str> for StatusCode
impl<'a> TryFrom<&'a str> for StatusCode
type Error = InvalidStatusCode
§impl<'a> TryFrom<&'a str> for PathAndQuery
impl<'a> TryFrom<&'a str> for PathAndQuery
type Error = InvalidUri
§impl<'a> TryFrom<&'a String> for HeaderName
impl<'a> TryFrom<&'a String> for HeaderName
type Error = InvalidHeaderName
§impl<'a> TryFrom<&'a String> for HeaderValue
impl<'a> TryFrom<&'a String> for HeaderValue
type Error = InvalidHeaderValue
§impl<'a> TryFrom<&'a [u8]> for HeaderName
impl<'a> TryFrom<&'a [u8]> for HeaderName
type Error = InvalidHeaderName
§impl<'a> TryFrom<&'a [u8]> for HeaderValue
impl<'a> TryFrom<&'a [u8]> for HeaderValue
type Error = InvalidHeaderValue
§impl<'a> TryFrom<&'a [u8]> for StatusCode
impl<'a> TryFrom<&'a [u8]> for StatusCode
type Error = InvalidStatusCode
§impl<'a> TryFrom<&'a [u8]> for PathAndQuery
impl<'a> TryFrom<&'a [u8]> for PathAndQuery
type Error = InvalidUri
§impl<'a, 'py, T> TryFrom<BoundRef<'a, 'py, T>> for PyRef<'py, T>where
T: PyClass,
impl<'a, 'py, T> TryFrom<BoundRef<'a, 'py, T>> for PyRef<'py, T>where
T: PyClass,
type Error = PyBorrowError
§impl<'a, 'py, T> TryFrom<BoundRef<'a, 'py, T>> for PyRefMut<'py, T>where
T: PyClass<Frozen = False>,
impl<'a, 'py, T> TryFrom<BoundRef<'a, 'py, T>> for PyRefMut<'py, T>where
T: PyClass<Frozen = False>,
type Error = PyBorrowMutError
§impl<'a, K, V, S, T> TryFrom<&'a HashMap<K, V, S>> for HeaderMap<T>
Try to convert a HashMap
into a HeaderMap
.
impl<'a, K, V, S, T> TryFrom<&'a HashMap<K, V, S>> 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");
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
§impl<'a, T, const N: usize> TryFrom<Box<'a, [T]>> for devela::_dep::bumpalo::boxed::Box<'a, [T; N]>
This impl replaces unsize coercion.
impl<'a, T, const N: usize> TryFrom<Box<'a, [T]>> for devela::_dep::bumpalo::boxed::Box<'a, [T; N]>
This impl replaces unsize coercion.
Source§impl<'a, const CAP: usize> TryFrom<&'a str> for ArrayString<CAP>
impl<'a, const CAP: usize> TryFrom<&'a str> for ArrayString<CAP>
type Error = CapacityError<&'a str>
Source§impl<'a, const CAP: usize> TryFrom<Arguments<'a>> for ArrayString<CAP>
impl<'a, const CAP: usize> TryFrom<Arguments<'a>> for ArrayString<CAP>
type Error = CapacityError<Error>
Source§impl<T> TryFrom<Interval<T>> for Range<T>
§Errors
Returns IncompatibleBounds
if the bounds are not compatible.
impl<T> TryFrom<Interval<T>> for Range<T>
§Errors
Returns IncompatibleBounds
if the bounds are not compatible.
Source§impl<T> TryFrom<Interval<T>> for RangeFrom<T>
§Errors
Returns IncompatibleBounds
if the bounds are not compatible.
impl<T> TryFrom<Interval<T>> for RangeFrom<T>
§Errors
Returns IncompatibleBounds
if the bounds are not compatible.
Source§impl<T> TryFrom<Interval<T>> for RangeFull
§Errors
Returns IncompatibleBounds
if the bounds are not compatible.
impl<T> TryFrom<Interval<T>> for RangeFull
§Errors
Returns IncompatibleBounds
if the bounds are not compatible.
Source§impl<T> TryFrom<Interval<T>> for RangeInclusive<T>
§Errors
Returns IncompatibleBounds
if the bounds are not compatible.
impl<T> TryFrom<Interval<T>> for RangeInclusive<T>
§Errors
Returns IncompatibleBounds
if the bounds are not compatible.
Source§impl<T> TryFrom<Interval<T>> for RangeTo<T>
§Errors
Returns IncompatibleBounds
if the bounds are not compatible.
impl<T> TryFrom<Interval<T>> for RangeTo<T>
§Errors
Returns IncompatibleBounds
if the bounds are not compatible.
Source§impl<T> TryFrom<Interval<T>> for RangeToInclusive<T>
§Errors
Returns IncompatibleBounds
if the bounds are not compatible.
impl<T> TryFrom<Interval<T>> for RangeToInclusive<T>
§Errors
Returns IncompatibleBounds
if the bounds are not compatible.
1.43.0 · Source§impl<T, A, const N: usize> TryFrom<Arc<[T], A>> for devela::_dep::_alloc::sync::Arc<[T; N], A>where
A: Allocator,
impl<T, A, const N: usize> TryFrom<Arc<[T], A>> for devela::_dep::_alloc::sync::Arc<[T; N], A>where
A: Allocator,
Source§impl<T, const CAP: usize> TryFrom<&[T]> for ArrayVec<T, CAP>where
T: Clone,
Try to create an ArrayVec
from a slice. This will return an error if the slice was too big to
fit.
impl<T, const CAP: usize> TryFrom<&[T]> for ArrayVec<T, CAP>where
T: Clone,
Try to create an ArrayVec
from a slice. This will return an error if the slice was too big to
fit.
use arrayvec::ArrayVec;
use std::convert::TryInto as _;
let array: ArrayVec<_, 4> = (&[1, 2, 3] as &[_]).try_into().unwrap();
assert_eq!(array.len(), 3);
assert_eq!(array.capacity(), 4);
type Error = CapacityError
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));
type Error = TryFromSliceError
Source§impl<T, const N: usize> TryFrom<&mut [T]> for Simd<T, N>
impl<T, const N: usize> TryFrom<&mut [T]> for Simd<T, N>
type Error = TryFromSliceError
Source§impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for bool
impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for bool
Source§impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for char
impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for char
Source§impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for f32
impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for f32
Source§impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for f64
impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for f64
Source§impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for i8
impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for i8
Source§impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for i16
impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for i16
Source§impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for i32
impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for i32
Source§impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for i64
impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for i64
Source§impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for u8
impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for u8
Source§impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for u16
impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for u16
Source§impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for u32
impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for u32
Source§impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for u64
impl<V: DataValueCopy> TryFrom<DataValue64CopyWith<V>> for u64
Source§impl<const CAP: usize> TryFrom<&str> for StringNonul<CAP>
Available on crate feature _str_nonul
only.
impl<const CAP: usize> TryFrom<&str> for StringNonul<CAP>
_str_nonul
only.type Error = MismatchedCapacity
Source§impl<const CAP: usize> TryFrom<&[u8]> for StringNonul<CAP>
Available on crate feature _str_nonul
only.
impl<const CAP: usize> TryFrom<&[u8]> for StringNonul<CAP>
_str_nonul
only.type Error = InvalidText
Source§impl<const V: i8> TryFrom<i8> for devela::_info::examples::niche::NonValueI8<V>
Available on doc
or test
only.
impl<const V: i8> TryFrom<i8> for devela::_info::examples::niche::NonValueI8<V>
doc
or test
only.