Struct PrimitiveDateTime

struct PrimitiveDateTime { ... }

Combined date and time.

Implementations

impl PrimitiveDateTime

const fn replace_time(self: Self, time: Time) -> Self

Replace the time, preserving the date.

# use time_macros::{datetime, time};
assert_eq!(
    datetime!(2020-01-01 17:00).replace_time(time!(5:00)),
    datetime!(2020-01-01 5:00)
);
const fn replace_date(self: Self, date: Date) -> Self

Replace the date, preserving the time.

# use time_macros::{datetime, date};
assert_eq!(
    datetime!(2020-01-01 12:00).replace_date(date!(2020-01-30)),
    datetime!(2020-01-30 12:00)
);
const fn replace_year(self: Self, year: i32) -> Result<Self, ComponentRange>

Replace the year. The month and day will be unchanged.

# use time_macros::datetime;
assert_eq!(
    datetime!(2022-02-18 12:00).replace_year(2019),
    Ok(datetime!(2019-02-18 12:00))
);
assert!(datetime!(2022-02-18 12:00).replace_year(-1_000_000_000).is_err()); // -1_000_000_000 isn't a valid year
assert!(datetime!(2022-02-18 12:00).replace_year(1_000_000_000).is_err()); // 1_000_000_000 isn't a valid year
const fn replace_month(self: Self, month: Month) -> Result<Self, ComponentRange>

Replace the month of the year.

# use time_macros::datetime;
# use time::Month;
assert_eq!(
    datetime!(2022-02-18 12:00).replace_month(Month::January),
    Ok(datetime!(2022-01-18 12:00))
);
assert!(datetime!(2022-01-30 12:00).replace_month(Month::February).is_err()); // 30 isn't a valid day in February
const fn replace_day(self: Self, day: u8) -> Result<Self, ComponentRange>

Replace the day of the month.

# use time_macros::datetime;
assert_eq!(
    datetime!(2022-02-18 12:00).replace_day(1),
    Ok(datetime!(2022-02-01 12:00))
);
assert!(datetime!(2022-02-18 12:00).replace_day(0).is_err()); // 00 isn't a valid day
assert!(datetime!(2022-02-18 12:00).replace_day(30).is_err()); // 30 isn't a valid day in February
const fn replace_ordinal(self: Self, ordinal: u16) -> Result<Self, ComponentRange>

Replace the day of the year.

# use time_macros::datetime;
assert_eq!(datetime!(2022-049 12:00).replace_ordinal(1), Ok(datetime!(2022-001 12:00)));
assert!(datetime!(2022-049 12:00).replace_ordinal(0).is_err()); // 0 isn't a valid ordinal
assert!(datetime!(2022-049 12:00).replace_ordinal(366).is_err()); // 2022 isn't a leap year
const fn truncate_to_day(self: Self) -> Self

Truncate to the start of the day, setting the time to midnight.

# use time_macros::datetime;
assert_eq!(
    datetime!(2022-02-18 15:30:45.123_456_789).truncate_to_day(),
    datetime!(2022-02-18 0:00)
);
const fn replace_hour(self: Self, hour: u8) -> Result<Self, ComponentRange>

Replace the clock hour.

# use time_macros::datetime;
assert_eq!(
    datetime!(2022-02-18 01:02:03.004_005_006).replace_hour(7),
    Ok(datetime!(2022-02-18 07:02:03.004_005_006))
);
assert!(datetime!(2022-02-18 01:02:03.004_005_006).replace_hour(24).is_err()); // 24 isn't a valid hour
const fn truncate_to_hour(self: Self) -> Self

Truncate to the hour, setting the minute, second, and subsecond components to zero.

# use time_macros::datetime;
assert_eq!(
    datetime!(2022-02-18 15:30:45.123_456_789).truncate_to_hour(),
    datetime!(2022-02-18 15:00)
);
const fn replace_minute(self: Self, minute: u8) -> Result<Self, ComponentRange>

Replace the minutes within the hour.

# use time_macros::datetime;
assert_eq!(
    datetime!(2022-02-18 01:02:03.004_005_006).replace_minute(7),
    Ok(datetime!(2022-02-18 01:07:03.004_005_006))
);
assert!(datetime!(2022-02-18 01:02:03.004_005_006).replace_minute(60).is_err()); // 60 isn't a valid minute
const fn truncate_to_minute(self: Self) -> Self

Truncate to the minute, setting the second and subsecond components to zero.

# use time_macros::datetime;
assert_eq!(
    datetime!(2022-02-18 15:30:45.123_456_789).truncate_to_minute(),
    datetime!(2022-02-18 15:30)
);
const fn replace_second(self: Self, second: u8) -> Result<Self, ComponentRange>

Replace the seconds within the minute.

# use time_macros::datetime;
assert_eq!(
    datetime!(2022-02-18 01:02:03.004_005_006).replace_second(7),
    Ok(datetime!(2022-02-18 01:02:07.004_005_006))
);
assert!(datetime!(2022-02-18 01:02:03.004_005_006).replace_second(60).is_err()); // 60 isn't a valid second
const fn truncate_to_second(self: Self) -> Self

Truncate to the second, setting the subsecond components to zero.

# use time_macros::datetime;
assert_eq!(
    datetime!(2022-02-18 15:30:45.123_456_789).truncate_to_second(),
    datetime!(2022-02-18 15:30:45)
);
const fn replace_millisecond(self: Self, millisecond: u16) -> Result<Self, ComponentRange>

Replace the milliseconds within the second.

# use time_macros::datetime;
assert_eq!(
    datetime!(2022-02-18 01:02:03.004_005_006).replace_millisecond(7),
    Ok(datetime!(2022-02-18 01:02:03.007))
);
assert!(datetime!(2022-02-18 01:02:03.004_005_006).replace_millisecond(1_000).is_err()); // 1_000 isn't a valid millisecond
const fn truncate_to_millisecond(self: Self) -> Self

Truncate to the millisecond, setting the microsecond and nanosecond components to zero.

# use time_macros::datetime;
assert_eq!(
    datetime!(2022-02-18 15:30:45.123_456_789).truncate_to_millisecond(),
    datetime!(2022-02-18 15:30:45.123)
);
const fn replace_microsecond(self: Self, microsecond: u32) -> Result<Self, ComponentRange>

Replace the microseconds within the second.

# use time_macros::datetime;
assert_eq!(
    datetime!(2022-02-18 01:02:03.004_005_006).replace_microsecond(7_008),
    Ok(datetime!(2022-02-18 01:02:03.007_008))
);
assert!(datetime!(2022-02-18 01:02:03.004_005_006).replace_microsecond(1_000_000).is_err()); // 1_000_000 isn't a valid microsecond
const fn truncate_to_microsecond(self: Self) -> Self

Truncate to the microsecond, setting the nanosecond component to zero.

# use time_macros::datetime;
assert_eq!(
    datetime!(2022-02-18 15:30:45.123_456_789).truncate_to_microsecond(),
    datetime!(2022-02-18 15:30:45.123_456)
);
const fn replace_nanosecond(self: Self, nanosecond: u32) -> Result<Self, ComponentRange>

Replace the nanoseconds within the second.

# use time_macros::datetime;
assert_eq!(
    datetime!(2022-02-18 01:02:03.004_005_006).replace_nanosecond(7_008_009),
    Ok(datetime!(2022-02-18 01:02:03.007_008_009))
);
assert!(datetime!(2022-02-18 01:02:03.004_005_006).replace_nanosecond(1_000_000_000).is_err()); // 1_000_000_000 isn't a valid nanosecond

impl PrimitiveDateTime

const fn new(date: Date, time: Time) -> Self

Create a new PrimitiveDateTime from the provided Date and Time.

# use time::PrimitiveDateTime;
# use time_macros::{date, datetime, time};
assert_eq!(
    PrimitiveDateTime::new(date!(2019-01-01), time!(0:00)),
    datetime!(2019-01-01 0:00),
);
const fn date(self: Self) -> Date

Get the Date component of the PrimitiveDateTime.

# use time_macros::{date, datetime};
assert_eq!(datetime!(2019-01-01 0:00).date(), date!(2019-01-01));
const fn time(self: Self) -> Time

Get the Time component of the PrimitiveDateTime.

# use time_macros::{datetime, time};
assert_eq!(datetime!(2019-01-01 0:00).time(), time!(0:00));
const fn year(self: Self) -> i32

Get the year of the date.

# use time_macros::datetime;
assert_eq!(datetime!(2019-01-01 0:00).year(), 2019);
assert_eq!(datetime!(2019-12-31 0:00).year(), 2019);
assert_eq!(datetime!(2020-01-01 0:00).year(), 2020);
const fn month(self: Self) -> Month

Get the month of the date.

# use time::Month;
# use time_macros::datetime;
assert_eq!(datetime!(2019-01-01 0:00).month(), Month::January);
assert_eq!(datetime!(2019-12-31 0:00).month(), Month::December);
const fn day(self: Self) -> u8

Get the day of the date.

The returned value will always be in the range 1..=31.

# use time_macros::datetime;
assert_eq!(datetime!(2019-01-01 0:00).day(), 1);
assert_eq!(datetime!(2019-12-31 0:00).day(), 31);
const fn ordinal(self: Self) -> u16

Get the day of the year.

The returned value will always be in the range 1..=366 (1..=365 for common years).

# use time_macros::datetime;
assert_eq!(datetime!(2019-01-01 0:00).ordinal(), 1);
assert_eq!(datetime!(2019-12-31 0:00).ordinal(), 365);
const fn iso_week(self: Self) -> u8

Get the ISO week number.

The returned value will always be in the range 1..=53.

# use time_macros::datetime;
assert_eq!(datetime!(2019-01-01 0:00).iso_week(), 1);
assert_eq!(datetime!(2019-10-04 0:00).iso_week(), 40);
assert_eq!(datetime!(2020-01-01 0:00).iso_week(), 1);
assert_eq!(datetime!(2020-12-31 0:00).iso_week(), 53);
assert_eq!(datetime!(2021-01-01 0:00).iso_week(), 53);
const fn sunday_based_week(self: Self) -> u8

Get the week number where week 1 begins on the first Sunday.

The returned value will always be in the range 0..=53.

# use time_macros::datetime;
assert_eq!(datetime!(2019-01-01 0:00).sunday_based_week(), 0);
assert_eq!(datetime!(2020-01-01 0:00).sunday_based_week(), 0);
assert_eq!(datetime!(2020-12-31 0:00).sunday_based_week(), 52);
assert_eq!(datetime!(2021-01-01 0:00).sunday_based_week(), 0);
const fn monday_based_week(self: Self) -> u8

Get the week number where week 1 begins on the first Monday.

The returned value will always be in the range 0..=53.

# use time_macros::datetime;
assert_eq!(datetime!(2019-01-01 0:00).monday_based_week(), 0);
assert_eq!(datetime!(2020-01-01 0:00).monday_based_week(), 0);
assert_eq!(datetime!(2020-12-31 0:00).monday_based_week(), 52);
assert_eq!(datetime!(2021-01-01 0:00).monday_based_week(), 0);
const fn to_calendar_date(self: Self) -> (i32, Month, u8)

Get the year, month, and day.

# use time::Month;
# use time_macros::datetime;
assert_eq!(
    datetime!(2019-01-01 0:00).to_calendar_date(),
    (2019, Month::January, 1)
);
const fn to_ordinal_date(self: Self) -> (i32, u16)

Get the year and ordinal day number.

# use time_macros::datetime;
assert_eq!(datetime!(2019-01-01 0:00).to_ordinal_date(), (2019, 1));
const fn to_iso_week_date(self: Self) -> (i32, u8, Weekday)

Get the ISO 8601 year, week number, and weekday.

# use time::Weekday::*;
# use time_macros::datetime;
assert_eq!(
    datetime!(2019-01-01 0:00).to_iso_week_date(),
    (2019, 1, Tuesday)
);
assert_eq!(
    datetime!(2019-10-04 0:00).to_iso_week_date(),
    (2019, 40, Friday)
);
assert_eq!(
    datetime!(2020-01-01 0:00).to_iso_week_date(),
    (2020, 1, Wednesday)
);
assert_eq!(
    datetime!(2020-12-31 0:00).to_iso_week_date(),
    (2020, 53, Thursday)
);
assert_eq!(
    datetime!(2021-01-01 0:00).to_iso_week_date(),
    (2020, 53, Friday)
);
const fn weekday(self: Self) -> Weekday

Get the weekday.

# use time::Weekday::*;
# use time_macros::datetime;
assert_eq!(datetime!(2019-01-01 0:00).weekday(), Tuesday);
assert_eq!(datetime!(2019-02-01 0:00).weekday(), Friday);
assert_eq!(datetime!(2019-03-01 0:00).weekday(), Friday);
assert_eq!(datetime!(2019-04-01 0:00).weekday(), Monday);
assert_eq!(datetime!(2019-05-01 0:00).weekday(), Wednesday);
assert_eq!(datetime!(2019-06-01 0:00).weekday(), Saturday);
assert_eq!(datetime!(2019-07-01 0:00).weekday(), Monday);
assert_eq!(datetime!(2019-08-01 0:00).weekday(), Thursday);
assert_eq!(datetime!(2019-09-01 0:00).weekday(), Sunday);
assert_eq!(datetime!(2019-10-01 0:00).weekday(), Tuesday);
assert_eq!(datetime!(2019-11-01 0:00).weekday(), Friday);
assert_eq!(datetime!(2019-12-01 0:00).weekday(), Sunday);
const fn to_julian_day(self: Self) -> i32

Get the Julian day for the date. The time is not taken into account for this calculation.

# use time_macros::datetime;
assert_eq!(datetime!(-4713-11-24 0:00).to_julian_day(), 0);
assert_eq!(datetime!(2000-01-01 0:00).to_julian_day(), 2_451_545);
assert_eq!(datetime!(2019-01-01 0:00).to_julian_day(), 2_458_485);
assert_eq!(datetime!(2019-12-31 0:00).to_julian_day(), 2_458_849);
const fn as_hms(self: Self) -> (u8, u8, u8)

Get the clock hour, minute, and second.

# use time_macros::datetime;
assert_eq!(datetime!(2020-01-01 0:00:00).as_hms(), (0, 0, 0));
assert_eq!(datetime!(2020-01-01 23:59:59).as_hms(), (23, 59, 59));
const fn as_hms_milli(self: Self) -> (u8, u8, u8, u16)

Get the clock hour, minute, second, and millisecond.

# use time_macros::datetime;
assert_eq!(datetime!(2020-01-01 0:00:00).as_hms_milli(), (0, 0, 0, 0));
assert_eq!(
    datetime!(2020-01-01 23:59:59.999).as_hms_milli(),
    (23, 59, 59, 999)
);
const fn as_hms_micro(self: Self) -> (u8, u8, u8, u32)

Get the clock hour, minute, second, and microsecond.

# use time_macros::datetime;
assert_eq!(datetime!(2020-01-01 0:00:00).as_hms_micro(), (0, 0, 0, 0));
assert_eq!(
    datetime!(2020-01-01 23:59:59.999_999).as_hms_micro(),
    (23, 59, 59, 999_999)
);
const fn as_hms_nano(self: Self) -> (u8, u8, u8, u32)

Get the clock hour, minute, second, and nanosecond.

# use time_macros::datetime;
assert_eq!(datetime!(2020-01-01 0:00:00).as_hms_nano(), (0, 0, 0, 0));
assert_eq!(
    datetime!(2020-01-01 23:59:59.999_999_999).as_hms_nano(),
    (23, 59, 59, 999_999_999)
);
const fn hour(self: Self) -> u8

Get the clock hour.

The returned value will always be in the range 0..24.

# use time_macros::datetime;
assert_eq!(datetime!(2019-01-01 0:00).hour(), 0);
assert_eq!(datetime!(2019-01-01 23:59:59).hour(), 23);
const fn minute(self: Self) -> u8

Get the minute within the hour.

The returned value will always be in the range 0..60.

# use time_macros::datetime;
assert_eq!(datetime!(2019-01-01 0:00).minute(), 0);
assert_eq!(datetime!(2019-01-01 23:59:59).minute(), 59);
const fn second(self: Self) -> u8

Get the second within the minute.

The returned value will always be in the range 0..60.

# use time_macros::datetime;
assert_eq!(datetime!(2019-01-01 0:00).second(), 0);
assert_eq!(datetime!(2019-01-01 23:59:59).second(), 59);
const fn millisecond(self: Self) -> u16

Get the milliseconds within the second.

The returned value will always be in the range 0..1_000.

# use time_macros::datetime;
assert_eq!(datetime!(2019-01-01 0:00).millisecond(), 0);
assert_eq!(datetime!(2019-01-01 23:59:59.999).millisecond(), 999);
const fn microsecond(self: Self) -> u32

Get the microseconds within the second.

The returned value will always be in the range 0..1_000_000.

# use time_macros::datetime;
assert_eq!(datetime!(2019-01-01 0:00).microsecond(), 0);
assert_eq!(
    datetime!(2019-01-01 23:59:59.999_999).microsecond(),
    999_999
);
const fn nanosecond(self: Self) -> u32

Get the nanoseconds within the second.

The returned value will always be in the range 0..1_000_000_000.

# use time_macros::datetime;
assert_eq!(datetime!(2019-01-01 0:00).nanosecond(), 0);
assert_eq!(
    datetime!(2019-01-01 23:59:59.999_999_999).nanosecond(),
    999_999_999,
);
const fn assume_offset(self: Self, offset: UtcOffset) -> OffsetDateTime

Assuming that the existing PrimitiveDateTime represents a moment in the provided UtcOffset, return an OffsetDateTime.

# use time_macros::{datetime, offset};
assert_eq!(
    datetime!(2019-01-01 0:00)
        .assume_offset(offset!(UTC))
        .unix_timestamp(),
    1_546_300_800,
);
assert_eq!(
    datetime!(2019-01-01 0:00)
        .assume_offset(offset!(-1))
        .unix_timestamp(),
    1_546_304_400,
);
const fn assume_utc(self: Self) -> OffsetDateTime

Assuming that the existing PrimitiveDateTime represents a moment in UTC, return an OffsetDateTime.

# use time_macros::datetime;
assert_eq!(
    datetime!(2019-01-01 0:00).assume_utc().unix_timestamp(),
    1_546_300_800,
);

Note: You may want a UtcDateTime instead, which can be obtained with the PrimitiveDateTime::as_utc method.

const fn as_utc(self: Self) -> UtcDateTime

Assuming that the existing PrimitiveDateTime represents a moment in UTC, return a UtcDateTime.

# use time_macros::datetime;
assert_eq!(
    datetime!(2019-01-01 0:00).as_utc().unix_timestamp(),
    1_546_300_800,
);
const fn checked_add(self: Self, duration: Duration) -> Option<Self>

Computes self + duration, returning None if an overflow occurred.

# use time::{Date, ext::NumericalDuration};
# use time_macros::datetime;
let datetime = Date::MIN.midnight();
assert_eq!(datetime.checked_add((-2).days()), None);

let datetime = Date::MAX.midnight();
assert_eq!(datetime.checked_add(1.days()), None);

assert_eq!(
    datetime!(2019-11-25 15:30).checked_add(27.hours()),
    Some(datetime!(2019-11-26 18:30))
);
const fn checked_sub(self: Self, duration: Duration) -> Option<Self>

Computes self - duration, returning None if an overflow occurred.

# use time::{Date, ext::NumericalDuration};
# use time_macros::datetime;
let datetime = Date::MIN.midnight();
assert_eq!(datetime.checked_sub(2.days()), None);

let datetime = Date::MAX.midnight();
assert_eq!(datetime.checked_sub((-1).days()), None);

assert_eq!(
    datetime!(2019-11-25 15:30).checked_sub(27.hours()),
    Some(datetime!(2019-11-24 12:30))
);
const fn saturating_add(self: Self, duration: Duration) -> Self

Computes self + duration, saturating value on overflow.

# use time::{PrimitiveDateTime, ext::NumericalDuration};
# use time_macros::datetime;
assert_eq!(
    PrimitiveDateTime::MIN.saturating_add((-2).days()),
    PrimitiveDateTime::MIN
);

assert_eq!(
    PrimitiveDateTime::MAX.saturating_add(2.days()),
    PrimitiveDateTime::MAX
);

assert_eq!(
    datetime!(2019-11-25 15:30).saturating_add(27.hours()),
    datetime!(2019-11-26 18:30)
);
const fn saturating_sub(self: Self, duration: Duration) -> Self

Computes self - duration, saturating value on overflow.

# use time::{PrimitiveDateTime, ext::NumericalDuration};
# use time_macros::datetime;
assert_eq!(
    PrimitiveDateTime::MIN.saturating_sub(2.days()),
    PrimitiveDateTime::MIN
);

assert_eq!(
    PrimitiveDateTime::MAX.saturating_sub((-2).days()),
    PrimitiveDateTime::MAX
);

assert_eq!(
    datetime!(2019-11-25 15:30).saturating_sub(27.hours()),
    datetime!(2019-11-24 12:30)
);

impl Add for PrimitiveDateTime

fn add(self: Self, duration: Duration) -> <Self as >::Output

Panics

This may panic if an overflow occurs.

impl Add for PrimitiveDateTime

fn add(self: Self, duration: StdDuration) -> <Self as >::Output

Panics

This may panic if an overflow occurs.

impl AddAssign for PrimitiveDateTime

fn add_assign(self: &mut Self, duration: Duration)

Panics

This may panic if an overflow occurs.

impl AddAssign for PrimitiveDateTime

fn add_assign(self: &mut Self, duration: StdDuration)

Panics

This may panic if an overflow occurs.

impl Clone for PrimitiveDateTime

fn clone(self: &Self) -> PrimitiveDateTime

impl Copy for PrimitiveDateTime

impl Debug for PrimitiveDateTime

fn fmt(self: &Self, f: &mut Formatter<'_>) -> Result

impl Display for PrimitiveDateTime

fn fmt(self: &Self, f: &mut Formatter<'_>) -> Result

impl Eq for PrimitiveDateTime

impl Freeze for PrimitiveDateTime

impl Hash for PrimitiveDateTime

fn hash<H>(self: &Self, state: &mut H)
where
    H: Hasher

impl Ord for PrimitiveDateTime

fn cmp(self: &Self, other: &Self) -> Ordering

impl PartialEq for PrimitiveDateTime

fn eq(self: &Self, other: &Self) -> bool

impl PartialOrd for PrimitiveDateTime

fn partial_cmp(self: &Self, other: &Self) -> Option<Ordering>

impl RefUnwindSafe for PrimitiveDateTime

impl Send for PrimitiveDateTime

impl SmartDisplay for PrimitiveDateTime

fn metadata(self: &Self, _: FormatterOptions) -> Metadata<'_, Self>
fn fmt_with_metadata(self: &Self, f: &mut Formatter<'_>, metadata: Metadata<'_, Self>) -> Result

impl Sub for PrimitiveDateTime

fn sub(self: Self, duration: StdDuration) -> <Self as >::Output

Panics

This may panic if an overflow occurs.

impl Sub for PrimitiveDateTime

fn sub(self: Self, rhs: Self) -> <Self as >::Output

Panics

This may panic if an overflow occurs.

impl Sub for PrimitiveDateTime

fn sub(self: Self, duration: Duration) -> <Self as >::Output

Panics

This may panic if an overflow occurs.

impl SubAssign for PrimitiveDateTime

fn sub_assign(self: &mut Self, duration: Duration)

Panics

This may panic if an overflow occurs.

impl SubAssign for PrimitiveDateTime

fn sub_assign(self: &mut Self, duration: StdDuration)

Panics

This may panic if an overflow occurs.

impl Sync for PrimitiveDateTime

impl Unpin for PrimitiveDateTime

impl UnsafeUnpin for PrimitiveDateTime

impl UnwindSafe for PrimitiveDateTime

impl<T> Any for PrimitiveDateTime

fn type_id(self: &Self) -> TypeId

impl<T> Borrow for PrimitiveDateTime

fn borrow(self: &Self) -> &T

impl<T> BorrowMut for PrimitiveDateTime

fn borrow_mut(self: &mut Self) -> &mut T

impl<T> CloneToUninit for PrimitiveDateTime

unsafe fn clone_to_uninit(self: &Self, dest: *mut u8)

impl<T> From for PrimitiveDateTime

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> ToOwned for PrimitiveDateTime

fn to_owned(self: &Self) -> T
fn clone_into(self: &Self, target: &mut T)

impl<T> ToString for PrimitiveDateTime

fn to_string(self: &Self) -> String

impl<T, U> Into for PrimitiveDateTime

fn into(self: Self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

impl<T, U> TryFrom for PrimitiveDateTime

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

impl<T, U> TryInto for PrimitiveDateTime

fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>