Sub

Trait Sub 

1.0.0 (const: unstable) · Source
pub trait Sub<Rhs = Self> {
    type Output;

    // Required method
    fn sub(self, rhs: Rhs) -> Self::Output;
}
Expand description

The subtraction operator -.

Note that Rhs is Self by default, but this is not mandatory. For example, std::time::SystemTime implements Sub<Duration>, which permits operations of the form SystemTime = SystemTime - Duration.

§Examples

§Subtractable points

use std::ops::Sub;

#[derive(Debug, Copy, Clone, PartialEq)]
struct Point {
    x: i32,
    y: i32,
}

impl Sub for Point {
    type Output = Self;

    fn sub(self, other: Self) -> Self::Output {
        Self {
            x: self.x - other.x,
            y: self.y - other.y,
        }
    }
}

assert_eq!(Point { x: 3, y: 3 } - Point { x: 2, y: 3 },
           Point { x: 1, y: 0 });

§Implementing Sub with generics

Here is an example of the same Point struct implementing the Sub trait using generics.

use std::ops::Sub;

#[derive(Debug, PartialEq)]
struct Point<T> {
    x: T,
    y: T,
}

// Notice that the implementation uses the associated type `Output`.
impl<T: Sub<Output = T>> Sub for Point<T> {
    type Output = Self;

    fn sub(self, other: Self) -> Self::Output {
        Point {
            x: self.x - other.x,
            y: self.y - other.y,
        }
    }
}

assert_eq!(Point { x: 2, y: 3 } - Point { x: 1, y: 0 },
           Point { x: 1, y: 3 });

Required Associated Types§

1.0.0 · Source

type Output

The resulting type after applying the - operator.

Required Methods§

1.0.0 · Source

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

Performs the - operation.

§Example
assert_eq!(12 - 1, 11);

Implementors§

Source§

impl Sub for Expr

Support <expr> - <expr> fluent style

1.0.0 (const: unstable) · Source§

impl Sub for f16

1.0.0 (const: unstable) · Source§

impl Sub for f32

1.0.0 (const: unstable) · Source§

impl Sub for f64

1.0.0 (const: unstable) · Source§

impl Sub for f128

1.0.0 (const: unstable) · Source§

impl Sub for i8

1.0.0 (const: unstable) · Source§

impl Sub for i16

1.0.0 (const: unstable) · Source§

impl Sub for i32

1.0.0 (const: unstable) · Source§

impl Sub for i64

1.0.0 (const: unstable) · Source§

impl Sub for i128

1.0.0 (const: unstable) · Source§

impl Sub for isize

1.0.0 (const: unstable) · Source§

impl Sub for u8

1.0.0 (const: unstable) · Source§

impl Sub for u16

1.0.0 (const: unstable) · Source§

impl Sub for u32

1.0.0 (const: unstable) · Source§

impl Sub for u64

1.0.0 (const: unstable) · Source§

impl Sub for u128

1.0.0 (const: unstable) · Source§

impl Sub for usize

§

impl Sub for IntervalDayTime

§

impl Sub for IntervalMonthDayNano

§

impl Sub for i256

§

type Output = i256

Source§

impl Sub for Assume

1.74.0 (const: unstable) · Source§

impl Sub for Saturating<i8>

1.74.0 (const: unstable) · Source§

impl Sub for Saturating<i16>

1.74.0 (const: unstable) · Source§

impl Sub for Saturating<i32>

1.74.0 (const: unstable) · Source§

impl Sub for Saturating<i64>

1.74.0 (const: unstable) · Source§

impl Sub for Saturating<i128>

1.74.0 (const: unstable) · Source§

impl Sub for Saturating<isize>

1.74.0 (const: unstable) · Source§

impl Sub for Saturating<u8>

1.74.0 (const: unstable) · Source§

impl Sub for Saturating<u16>

1.74.0 (const: unstable) · Source§

impl Sub for Saturating<u32>

1.74.0 (const: unstable) · Source§

impl Sub for Saturating<u64>

1.74.0 (const: unstable) · Source§

impl Sub for Saturating<u128>

1.74.0 (const: unstable) · Source§

impl Sub for Saturating<usize>

1.0.0 (const: unstable) · Source§

impl Sub for Wrapping<i8>

1.0.0 (const: unstable) · Source§

impl Sub for Wrapping<i16>

1.0.0 (const: unstable) · Source§

impl Sub for Wrapping<i32>

1.0.0 (const: unstable) · Source§

impl Sub for Wrapping<i64>

1.0.0 (const: unstable) · Source§

impl Sub for Wrapping<i128>

1.0.0 (const: unstable) · Source§

impl Sub for Wrapping<isize>

1.0.0 (const: unstable) · Source§

impl Sub for Wrapping<u8>

1.0.0 (const: unstable) · Source§

impl Sub for Wrapping<u16>

1.0.0 (const: unstable) · Source§

impl Sub for Wrapping<u32>

1.0.0 (const: unstable) · Source§

impl Sub for Wrapping<u64>

1.0.0 (const: unstable) · Source§

impl Sub for Wrapping<u128>

1.0.0 (const: unstable) · Source§

impl Sub for Wrapping<usize>

1.3.0 (const: unstable) · Source§

impl Sub for Duration

1.8.0 · Source§

impl Sub for std::time::Instant

Source§

impl Sub for NaiveDate

Subtracts another NaiveDate from the current date. Returns a TimeDelta of integral numbers.

This does not overflow or underflow at all, as all possible output fits in the range of TimeDelta.

The implementation is a wrapper around NaiveDate::signed_duration_since.

§Example

use chrono::{NaiveDate, TimeDelta};

let from_ymd = |y, m, d| NaiveDate::from_ymd_opt(y, m, d).unwrap();

assert_eq!(from_ymd(2014, 1, 1) - from_ymd(2014, 1, 1), TimeDelta::zero());
assert_eq!(from_ymd(2014, 1, 1) - from_ymd(2013, 12, 31), TimeDelta::try_days(1).unwrap());
assert_eq!(from_ymd(2014, 1, 1) - from_ymd(2014, 1, 2), TimeDelta::try_days(-1).unwrap());
assert_eq!(from_ymd(2014, 1, 1) - from_ymd(2013, 9, 23), TimeDelta::try_days(100).unwrap());
assert_eq!(from_ymd(2014, 1, 1) - from_ymd(2013, 1, 1), TimeDelta::try_days(365).unwrap());
assert_eq!(
    from_ymd(2014, 1, 1) - from_ymd(2010, 1, 1),
    TimeDelta::try_days(365 * 4 + 1).unwrap()
);
assert_eq!(
    from_ymd(2014, 1, 1) - from_ymd(1614, 1, 1),
    TimeDelta::try_days(365 * 400 + 97).unwrap()
);
Source§

impl Sub for NaiveDateTime

Subtracts another NaiveDateTime from the current date and time. This does not overflow or underflow at all.

As a part of Chrono’s leap second handling, the subtraction assumes that there is no leap second ever, except when any of the NaiveDateTimes themselves represents a leap second in which case the assumption becomes that there are exactly one (or two) leap second(s) ever.

The implementation is a wrapper around NaiveDateTime::signed_duration_since.

§Example

use chrono::{NaiveDate, TimeDelta};

let from_ymd = |y, m, d| NaiveDate::from_ymd_opt(y, m, d).unwrap();

let d = from_ymd(2016, 7, 8);
assert_eq!(
    d.and_hms_opt(3, 5, 7).unwrap() - d.and_hms_opt(2, 4, 6).unwrap(),
    TimeDelta::try_seconds(3600 + 60 + 1).unwrap()
);

// July 8 is 190th day in the year 2016
let d0 = from_ymd(2016, 1, 1);
assert_eq!(
    d.and_hms_milli_opt(0, 7, 6, 500).unwrap() - d0.and_hms_opt(0, 0, 0).unwrap(),
    TimeDelta::try_seconds(189 * 86_400 + 7 * 60 + 6).unwrap()
        + TimeDelta::try_milliseconds(500).unwrap()
);

Leap seconds are handled, but the subtraction assumes that no other leap seconds happened.

let leap = from_ymd(2015, 6, 30).and_hms_milli_opt(23, 59, 59, 1_500).unwrap();
assert_eq!(
    leap - from_ymd(2015, 6, 30).and_hms_opt(23, 0, 0).unwrap(),
    TimeDelta::try_seconds(3600).unwrap() + TimeDelta::try_milliseconds(500).unwrap()
);
assert_eq!(
    from_ymd(2015, 7, 1).and_hms_opt(1, 0, 0).unwrap() - leap,
    TimeDelta::try_seconds(3600).unwrap() - TimeDelta::try_milliseconds(500).unwrap()
);
Source§

impl Sub for NaiveTime

Subtracts another NaiveTime from the current time. Returns a TimeDelta within +/- 1 day. This does not overflow or underflow at all.

As a part of Chrono’s leap second handling, the subtraction assumes that there is no leap second ever, except when any of the NaiveTimes themselves represents a leap second in which case the assumption becomes that there are exactly one (or two) leap second(s) ever.

The implementation is a wrapper around NaiveTime::signed_duration_since.

§Example

use chrono::{NaiveTime, TimeDelta};

let from_hmsm = |h, m, s, milli| NaiveTime::from_hms_milli_opt(h, m, s, milli).unwrap();

assert_eq!(from_hmsm(3, 5, 7, 900) - from_hmsm(3, 5, 7, 900), TimeDelta::zero());
assert_eq!(
    from_hmsm(3, 5, 7, 900) - from_hmsm(3, 5, 7, 875),
    TimeDelta::try_milliseconds(25).unwrap()
);
assert_eq!(
    from_hmsm(3, 5, 7, 900) - from_hmsm(3, 5, 6, 925),
    TimeDelta::try_milliseconds(975).unwrap()
);
assert_eq!(
    from_hmsm(3, 5, 7, 900) - from_hmsm(3, 5, 0, 900),
    TimeDelta::try_seconds(7).unwrap()
);
assert_eq!(
    from_hmsm(3, 5, 7, 900) - from_hmsm(3, 0, 7, 900),
    TimeDelta::try_seconds(5 * 60).unwrap()
);
assert_eq!(
    from_hmsm(3, 5, 7, 900) - from_hmsm(0, 5, 7, 900),
    TimeDelta::try_seconds(3 * 3600).unwrap()
);
assert_eq!(
    from_hmsm(3, 5, 7, 900) - from_hmsm(4, 5, 7, 900),
    TimeDelta::try_seconds(-3600).unwrap()
);
assert_eq!(
    from_hmsm(3, 5, 7, 900) - from_hmsm(2, 4, 6, 800),
    TimeDelta::try_seconds(3600 + 60 + 1).unwrap() + TimeDelta::try_milliseconds(100).unwrap()
);

Leap seconds are handled, but the subtraction assumes that there were no other leap seconds happened.

assert_eq!(from_hmsm(3, 0, 59, 1_000) - from_hmsm(3, 0, 59, 0), TimeDelta::try_seconds(1).unwrap());
assert_eq!(from_hmsm(3, 0, 59, 1_500) - from_hmsm(3, 0, 59, 0),
           TimeDelta::try_milliseconds(1500).unwrap());
assert_eq!(from_hmsm(3, 0, 59, 1_000) - from_hmsm(3, 0, 0, 0), TimeDelta::try_seconds(60).unwrap());
assert_eq!(from_hmsm(3, 0, 0, 0) - from_hmsm(2, 59, 59, 1_000), TimeDelta::try_seconds(1).unwrap());
assert_eq!(from_hmsm(3, 0, 59, 1_000) - from_hmsm(2, 59, 59, 1_000),
           TimeDelta::try_seconds(61).unwrap());
Source§

impl Sub for TimeDelta

Source§

impl Sub for bf16

Source§

impl Sub for f16

Source§

impl Sub for BigInt

Source§

impl Sub for BigUint

Source§

impl Sub for ATerm

Source§

impl Sub for Z0

Z0 - Z0 = Z0

Source§

impl Sub for UTerm

UTerm - UTerm = UTerm

§

impl Sub for Access

§

type Output = Access

§

impl Sub for AtFlags

§

type Output = AtFlags

§

impl Sub for BigDecimal

§

type Output = BigDecimal

§

impl Sub for CreateFlags

§

type Output = CreateFlags

§

impl Sub for DupFlags

§

type Output = DupFlags

§

impl Sub for FallocateFlags

§

type Output = FallocateFlags

§

impl Sub for FdFlags

§

type Output = FdFlags

§

impl Sub for Flags

§

type Output = Flags

§

impl Sub for IFlags

§

type Output = IFlags

§

impl Sub for Instant

§

impl Sub for MemfdFlags

§

type Output = MemfdFlags

§

impl Sub for Mode

§

type Output = Mode

§

impl Sub for OFlags

§

type Output = OFlags

§

impl Sub for ReadFlags

§

type Output = ReadFlags

§

impl Sub for ReadWriteFlags

§

type Output = ReadWriteFlags

§

impl Sub for Ready

§

type Output = Ready

§

impl Sub for RenameFlags

§

type Output = RenameFlags

§

impl Sub for ResolveFlags

§

type Output = ResolveFlags

§

impl Sub for SealFlags

§

type Output = SealFlags

§

impl Sub for StatVfsMountFlags

§

type Output = StatVfsMountFlags

§

impl Sub for StatxAttributes

§

type Output = StatxAttributes

§

impl Sub for StatxFlags

§

type Output = StatxFlags

§

impl Sub for Timespec

§

type Output = Timespec

§

impl Sub for WatchFlags

§

type Output = WatchFlags

§

impl Sub for XattrFlags

§

type Output = XattrFlags

1.0.0 (const: unstable) · Source§

impl Sub<&f16> for &f16

1.0.0 (const: unstable) · Source§

impl Sub<&f16> for f16

1.0.0 (const: unstable) · Source§

impl Sub<&f32> for &f32

1.0.0 (const: unstable) · Source§

impl Sub<&f32> for f32

1.0.0 (const: unstable) · Source§

impl Sub<&f64> for &f64

1.0.0 (const: unstable) · Source§

impl Sub<&f64> for f64

1.0.0 (const: unstable) · Source§

impl Sub<&f128> for &f128

1.0.0 (const: unstable) · Source§

impl Sub<&f128> for f128

1.0.0 (const: unstable) · Source§

impl Sub<&i8> for &i8

Source§

impl Sub<&i8> for &BigInt

§

impl Sub<&i8> for &BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<&i8> for i8

Source§

impl Sub<&i8> for BigInt

§

impl Sub<&i8> for BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<&i16> for &i16

Source§

impl Sub<&i16> for &BigInt

§

impl Sub<&i16> for &BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<&i16> for i16

Source§

impl Sub<&i16> for BigInt

§

impl Sub<&i16> for BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<&i32> for &i32

Source§

impl Sub<&i32> for &BigInt

§

impl Sub<&i32> for &BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<&i32> for i32

Source§

impl Sub<&i32> for BigInt

§

impl Sub<&i32> for BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<&i64> for &i64

Source§

impl Sub<&i64> for &BigInt

§

impl Sub<&i64> for &BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<&i64> for i64

Source§

impl Sub<&i64> for BigInt

§

impl Sub<&i64> for BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<&i128> for &i128

Source§

impl Sub<&i128> for &BigInt

§

impl Sub<&i128> for &BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<&i128> for i128

Source§

impl Sub<&i128> for BigInt

§

impl Sub<&i128> for BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<&isize> for &isize

Source§

impl Sub<&isize> for &BigInt

1.0.0 (const: unstable) · Source§

impl Sub<&isize> for isize

Source§

impl Sub<&isize> for BigInt

1.0.0 (const: unstable) · Source§

impl Sub<&u8> for &u8

Source§

impl Sub<&u8> for &BigInt

Source§

impl Sub<&u8> for &BigUint

§

impl Sub<&u8> for &BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<&u8> for u8

Source§

impl Sub<&u8> for BigInt

Source§

impl Sub<&u8> for BigUint

§

impl Sub<&u8> for BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<&u16> for &u16

Source§

impl Sub<&u16> for &BigInt

Source§

impl Sub<&u16> for &BigUint

§

impl Sub<&u16> for &BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<&u16> for u16

Source§

impl Sub<&u16> for BigInt

Source§

impl Sub<&u16> for BigUint

§

impl Sub<&u16> for BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<&u32> for &u32

Source§

impl Sub<&u32> for &BigInt

Source§

impl Sub<&u32> for &BigUint

§

impl Sub<&u32> for &BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<&u32> for u32

Source§

impl Sub<&u32> for BigInt

Source§

impl Sub<&u32> for BigUint

§

impl Sub<&u32> for BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<&u64> for &u64

Source§

impl Sub<&u64> for &BigInt

Source§

impl Sub<&u64> for &BigUint

§

impl Sub<&u64> for &BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<&u64> for u64

Source§

impl Sub<&u64> for BigInt

Source§

impl Sub<&u64> for BigUint

§

impl Sub<&u64> for BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<&u128> for &u128

Source§

impl Sub<&u128> for &BigInt

Source§

impl Sub<&u128> for &BigUint

§

impl Sub<&u128> for &BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<&u128> for u128

Source§

impl Sub<&u128> for BigInt

Source§

impl Sub<&u128> for BigUint

§

impl Sub<&u128> for BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<&usize> for &usize

Source§

impl Sub<&usize> for &BigInt

Source§

impl Sub<&usize> for &BigUint

1.0.0 (const: unstable) · Source§

impl Sub<&usize> for usize

Source§

impl Sub<&usize> for BigInt

Source§

impl Sub<&usize> for BigUint

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<i8>> for &Saturating<i8>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<i8>> for Saturating<i8>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<i16>> for &Saturating<i16>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<i16>> for Saturating<i16>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<i32>> for &Saturating<i32>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<i32>> for Saturating<i32>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<i64>> for &Saturating<i64>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<i64>> for Saturating<i64>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<i128>> for &Saturating<i128>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<i128>> for Saturating<i128>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<isize>> for &Saturating<isize>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<isize>> for Saturating<isize>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<u8>> for &Saturating<u8>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<u8>> for Saturating<u8>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<u16>> for &Saturating<u16>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<u16>> for Saturating<u16>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<u32>> for &Saturating<u32>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<u32>> for Saturating<u32>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<u64>> for &Saturating<u64>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<u64>> for Saturating<u64>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<u128>> for &Saturating<u128>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<u128>> for Saturating<u128>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<usize>> for &Saturating<usize>

1.74.0 (const: unstable) · Source§

impl Sub<&Saturating<usize>> for Saturating<usize>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<i8>> for &Wrapping<i8>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<i8>> for Wrapping<i8>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<i16>> for &Wrapping<i16>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<i16>> for Wrapping<i16>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<i32>> for &Wrapping<i32>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<i32>> for Wrapping<i32>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<i64>> for &Wrapping<i64>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<i64>> for Wrapping<i64>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<i128>> for &Wrapping<i128>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<i128>> for Wrapping<i128>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<isize>> for &Wrapping<isize>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<isize>> for Wrapping<isize>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<u8>> for &Wrapping<u8>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<u8>> for Wrapping<u8>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<u16>> for &Wrapping<u16>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<u16>> for Wrapping<u16>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<u32>> for &Wrapping<u32>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<u32>> for Wrapping<u32>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<u64>> for &Wrapping<u64>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<u64>> for Wrapping<u64>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<u128>> for &Wrapping<u128>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<u128>> for Wrapping<u128>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<usize>> for &Wrapping<usize>

1.14.0 (const: unstable) · Source§

impl Sub<&Wrapping<usize>> for Wrapping<usize>

Source§

impl Sub<&bf16> for &bf16

Source§

impl Sub<&bf16> for bf16

Source§

impl Sub<&f16> for &f16

Source§

impl Sub<&f16> for f16

Source§

impl Sub<&BigInt> for &i8

Source§

impl Sub<&BigInt> for &i16

Source§

impl Sub<&BigInt> for &i32

Source§

impl Sub<&BigInt> for &i64

Source§

impl Sub<&BigInt> for &i128

Source§

impl Sub<&BigInt> for &isize

Source§

impl Sub<&BigInt> for &u8

Source§

impl Sub<&BigInt> for &u16

Source§

impl Sub<&BigInt> for &u32

Source§

impl Sub<&BigInt> for &u64

Source§

impl Sub<&BigInt> for &u128

Source§

impl Sub<&BigInt> for &usize

Source§

impl Sub<&BigInt> for &BigInt

Source§

impl Sub<&BigInt> for i8

Source§

impl Sub<&BigInt> for i16

Source§

impl Sub<&BigInt> for i32

Source§

impl Sub<&BigInt> for i64

Source§

impl Sub<&BigInt> for i128

Source§

impl Sub<&BigInt> for isize

Source§

impl Sub<&BigInt> for u8

Source§

impl Sub<&BigInt> for u16

Source§

impl Sub<&BigInt> for u32

Source§

impl Sub<&BigInt> for u64

Source§

impl Sub<&BigInt> for u128

Source§

impl Sub<&BigInt> for usize

Source§

impl Sub<&BigInt> for BigInt

Source§

impl Sub<&BigUint> for &u8

Source§

impl Sub<&BigUint> for &u16

Source§

impl Sub<&BigUint> for &u32

Source§

impl Sub<&BigUint> for &u64

Source§

impl Sub<&BigUint> for &u128

Source§

impl Sub<&BigUint> for &usize

Source§

impl Sub<&BigUint> for &BigUint

Source§

impl Sub<&BigUint> for u8

Source§

impl Sub<&BigUint> for u16

Source§

impl Sub<&BigUint> for u32

Source§

impl Sub<&BigUint> for u64

Source§

impl Sub<&BigUint> for u128

Source§

impl Sub<&BigUint> for usize

Source§

impl Sub<&BigUint> for BigUint

§

impl Sub<&BigDecimal> for &i8

§

type Output = BigDecimal

§

impl Sub<&BigDecimal> for &i16

§

type Output = BigDecimal

§

impl Sub<&BigDecimal> for &i32

§

type Output = BigDecimal

§

impl Sub<&BigDecimal> for &i64

§

type Output = BigDecimal

§

impl Sub<&BigDecimal> for &i128

§

type Output = BigDecimal

§

impl Sub<&BigDecimal> for &u8

§

type Output = BigDecimal

§

impl Sub<&BigDecimal> for &u16

§

type Output = BigDecimal

§

impl Sub<&BigDecimal> for &u32

§

type Output = BigDecimal

§

impl Sub<&BigDecimal> for &u64

§

type Output = BigDecimal

§

impl Sub<&BigDecimal> for &u128

§

type Output = BigDecimal

§

impl Sub<&BigDecimal> for i8

§

type Output = BigDecimal

§

impl Sub<&BigDecimal> for i16

§

type Output = BigDecimal

§

impl Sub<&BigDecimal> for i32

§

type Output = BigDecimal

§

impl Sub<&BigDecimal> for i64

§

type Output = BigDecimal

§

impl Sub<&BigDecimal> for i128

§

type Output = BigDecimal

§

impl Sub<&BigDecimal> for u8

§

type Output = BigDecimal

§

impl Sub<&BigDecimal> for u16

§

type Output = BigDecimal

§

impl Sub<&BigDecimal> for u32

§

type Output = BigDecimal

§

impl Sub<&BigDecimal> for u64

§

type Output = BigDecimal

§

impl Sub<&BigDecimal> for u128

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<f16> for &f16

1.0.0 (const: unstable) · Source§

impl Sub<f32> for &f32

1.0.0 (const: unstable) · Source§

impl Sub<f64> for &f64

1.0.0 (const: unstable) · Source§

impl Sub<f128> for &f128

1.0.0 (const: unstable) · Source§

impl Sub<i8> for &i8

Source§

impl Sub<i8> for &BigInt

§

impl Sub<i8> for &BigDecimal

§

type Output = BigDecimal

Source§

impl Sub<i8> for BigInt

§

impl Sub<i8> for BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<i16> for &i16

Source§

impl Sub<i16> for &BigInt

§

impl Sub<i16> for &BigDecimal

§

type Output = BigDecimal

Source§

impl Sub<i16> for BigInt

§

impl Sub<i16> for BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<i32> for &i32

Source§

impl Sub<i32> for &BigInt

§

impl Sub<i32> for &BigDecimal

§

type Output = BigDecimal

Source§

impl Sub<i32> for BigInt

§

impl Sub<i32> for BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<i64> for &i64

Source§

impl Sub<i64> for &BigInt

§

impl Sub<i64> for &BigDecimal

§

type Output = BigDecimal

Source§

impl Sub<i64> for BigInt

§

impl Sub<i64> for BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<i128> for &i128

Source§

impl Sub<i128> for &BigInt

§

impl Sub<i128> for &BigDecimal

§

type Output = BigDecimal

Source§

impl Sub<i128> for BigInt

§

impl Sub<i128> for BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<isize> for &isize

Source§

impl Sub<isize> for &BigInt

Source§

impl Sub<isize> for BigInt

1.0.0 (const: unstable) · Source§

impl Sub<u8> for &u8

Source§

impl Sub<u8> for &BigInt

Source§

impl Sub<u8> for &BigUint

§

impl Sub<u8> for &BigDecimal

§

type Output = BigDecimal

Source§

impl Sub<u8> for BigInt

Source§

impl Sub<u8> for BigUint

§

impl Sub<u8> for BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<u16> for &u16

Source§

impl Sub<u16> for &BigInt

Source§

impl Sub<u16> for &BigUint

§

impl Sub<u16> for &BigDecimal

§

type Output = BigDecimal

Source§

impl Sub<u16> for BigInt

Source§

impl Sub<u16> for BigUint

§

impl Sub<u16> for BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<u32> for &u32

Source§

impl Sub<u32> for &BigInt

Source§

impl Sub<u32> for &BigUint

§

impl Sub<u32> for &BigDecimal

§

type Output = BigDecimal

Source§

impl Sub<u32> for BigInt

Source§

impl Sub<u32> for BigUint

§

impl Sub<u32> for BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<u64> for &u64

Source§

impl Sub<u64> for &BigInt

Source§

impl Sub<u64> for &BigUint

§

impl Sub<u64> for &BigDecimal

§

type Output = BigDecimal

Source§

impl Sub<u64> for BigInt

Source§

impl Sub<u64> for BigUint

§

impl Sub<u64> for BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<u128> for &u128

Source§

impl Sub<u128> for &BigInt

Source§

impl Sub<u128> for &BigUint

§

impl Sub<u128> for &BigDecimal

§

type Output = BigDecimal

Source§

impl Sub<u128> for BigInt

Source§

impl Sub<u128> for BigUint

§

impl Sub<u128> for BigDecimal

§

type Output = BigDecimal

1.0.0 (const: unstable) · Source§

impl Sub<usize> for &usize

Source§

impl Sub<usize> for &BigInt

Source§

impl Sub<usize> for &BigUint

Source§

impl Sub<usize> for BigInt

Source§

impl Sub<usize> for BigUint

1.74.0 (const: unstable) · Source§

impl Sub<Saturating<i8>> for &Saturating<i8>

1.74.0 (const: unstable) · Source§

impl Sub<Saturating<i16>> for &Saturating<i16>

1.74.0 (const: unstable) · Source§

impl Sub<Saturating<i32>> for &Saturating<i32>

1.74.0 (const: unstable) · Source§

impl Sub<Saturating<i64>> for &Saturating<i64>

1.74.0 (const: unstable) · Source§

impl Sub<Saturating<i128>> for &Saturating<i128>

1.74.0 (const: unstable) · Source§

impl Sub<Saturating<isize>> for &Saturating<isize>

1.74.0 (const: unstable) · Source§

impl Sub<Saturating<u8>> for &Saturating<u8>

1.74.0 (const: unstable) · Source§

impl Sub<Saturating<u16>> for &Saturating<u16>

1.74.0 (const: unstable) · Source§

impl Sub<Saturating<u32>> for &Saturating<u32>

1.74.0 (const: unstable) · Source§

impl Sub<Saturating<u64>> for &Saturating<u64>

1.74.0 (const: unstable) · Source§

impl Sub<Saturating<u128>> for &Saturating<u128>

1.74.0 (const: unstable) · Source§

impl Sub<Saturating<usize>> for &Saturating<usize>

1.14.0 (const: unstable) · Source§

impl Sub<Wrapping<i8>> for &Wrapping<i8>

1.14.0 (const: unstable) · Source§

impl Sub<Wrapping<i16>> for &Wrapping<i16>

1.14.0 (const: unstable) · Source§

impl Sub<Wrapping<i32>> for &Wrapping<i32>

1.14.0 (const: unstable) · Source§

impl Sub<Wrapping<i64>> for &Wrapping<i64>

1.14.0 (const: unstable) · Source§

impl Sub<Wrapping<i128>> for &Wrapping<i128>

1.14.0 (const: unstable) · Source§

impl Sub<Wrapping<isize>> for &Wrapping<isize>

1.14.0 (const: unstable) · Source§

impl Sub<Wrapping<u8>> for &Wrapping<u8>

1.14.0 (const: unstable) · Source§

impl Sub<Wrapping<u16>> for &Wrapping<u16>

1.14.0 (const: unstable) · Source§

impl Sub<Wrapping<u32>> for &Wrapping<u32>

1.14.0 (const: unstable) · Source§

impl Sub<Wrapping<u64>> for &Wrapping<u64>

1.14.0 (const: unstable) · Source§

impl Sub<Wrapping<u128>> for &Wrapping<u128>

1.14.0 (const: unstable) · Source§

impl Sub<Wrapping<usize>> for &Wrapping<usize>

1.8.0 · Source§

impl Sub<Duration> for std::time::Instant

1.8.0 · Source§

impl Sub<Duration> for SystemTime

Source§

impl Sub<Duration> for NaiveDateTime

Subtract std::time::Duration from NaiveDateTime.

As a part of Chrono’s [leap second handling] the subtraction assumes that there is no leap second ever, except when the NaiveDateTime itself represents a leap second in which case the assumption becomes that there is exactly a single leap second ever.

§Panics

Panics if the resulting date would be out of range. Consider using NaiveDateTime::checked_sub_signed to get an Option instead.

Source§

impl Sub<Duration> for NaiveTime

Subtract std::time::Duration from NaiveTime.

This wraps around and never overflows or underflows. In particular the subtraction ignores integral number of days.

§

impl Sub<Duration> for Instant

§

type Output = Instant

Source§

impl Sub<Months> for NaiveDate

Subtract Months from NaiveDate.

The result will be clamped to valid days in the resulting month, see checked_sub_months for details.

§Panics

Panics if the resulting date would be out of range. Consider using NaiveDate::checked_sub_months to get an Option instead.

§Example

use chrono::{Months, NaiveDate};

let from_ymd = |y, m, d| NaiveDate::from_ymd_opt(y, m, d).unwrap();

assert_eq!(from_ymd(2014, 1, 1) - Months::new(11), from_ymd(2013, 2, 1));
assert_eq!(from_ymd(2014, 1, 1) - Months::new(12), from_ymd(2013, 1, 1));
assert_eq!(from_ymd(2014, 1, 1) - Months::new(13), from_ymd(2012, 12, 1));
Source§

impl Sub<Months> for NaiveDateTime

Subtract Months from NaiveDateTime.

The result will be clamped to valid days in the resulting month, see NaiveDateTime::checked_sub_months for details.

§Panics

Panics if the resulting date would be out of range. Consider using NaiveDateTime::checked_sub_months to get an Option instead.

§Example

use chrono::{Months, NaiveDate};

assert_eq!(
    NaiveDate::from_ymd_opt(2014, 01, 01).unwrap().and_hms_opt(01, 00, 00).unwrap()
        - Months::new(11),
    NaiveDate::from_ymd_opt(2013, 02, 01).unwrap().and_hms_opt(01, 00, 00).unwrap()
);
assert_eq!(
    NaiveDate::from_ymd_opt(2014, 01, 01).unwrap().and_hms_opt(00, 02, 00).unwrap()
        - Months::new(12),
    NaiveDate::from_ymd_opt(2013, 01, 01).unwrap().and_hms_opt(00, 02, 00).unwrap()
);
assert_eq!(
    NaiveDate::from_ymd_opt(2014, 01, 01).unwrap().and_hms_opt(00, 00, 03).unwrap()
        - Months::new(13),
    NaiveDate::from_ymd_opt(2012, 12, 01).unwrap().and_hms_opt(00, 00, 03).unwrap()
);
Source§

impl Sub<Days> for NaiveDate

Subtract Days from NaiveDate.

§Panics

Panics if the resulting date would be out of range. Consider using NaiveDate::checked_sub_days to get an Option instead.

Source§

impl Sub<Days> for NaiveDateTime

Subtract Days from NaiveDateTime.

§Panics

Panics if the resulting date would be out of range. Consider using checked_sub_days to get an Option instead.

Source§

impl Sub<FixedOffset> for NaiveDateTime

Subtract FixedOffset from NaiveDateTime.

§Panics

Panics if the resulting date would be out of range. Consider using checked_sub_offset to get an Option instead.

Source§

impl Sub<FixedOffset> for NaiveTime

Subtract FixedOffset from NaiveTime.

This wraps around and never overflows or underflows. In particular the subtraction ignores integral number of days.

Source§

impl Sub<TimeDelta> for NaiveDate

Subtract TimeDelta from NaiveDate.

This discards the fractional days in TimeDelta, rounding to the closest integral number of days towards TimeDelta::zero(). It is the same as the addition with a negated TimeDelta.

§Panics

Panics if the resulting date would be out of range. Consider using NaiveDate::checked_sub_signed to get an Option instead.

§Example

use chrono::{NaiveDate, TimeDelta};

let from_ymd = |y, m, d| NaiveDate::from_ymd_opt(y, m, d).unwrap();

assert_eq!(from_ymd(2014, 1, 1) - TimeDelta::zero(), from_ymd(2014, 1, 1));
assert_eq!(from_ymd(2014, 1, 1) - TimeDelta::try_seconds(86399).unwrap(), from_ymd(2014, 1, 1));
assert_eq!(
    from_ymd(2014, 1, 1) - TimeDelta::try_seconds(-86399).unwrap(),
    from_ymd(2014, 1, 1)
);
assert_eq!(from_ymd(2014, 1, 1) - TimeDelta::try_days(1).unwrap(), from_ymd(2013, 12, 31));
assert_eq!(from_ymd(2014, 1, 1) - TimeDelta::try_days(-1).unwrap(), from_ymd(2014, 1, 2));
assert_eq!(from_ymd(2014, 1, 1) - TimeDelta::try_days(364).unwrap(), from_ymd(2013, 1, 2));
assert_eq!(
    from_ymd(2014, 1, 1) - TimeDelta::try_days(365 * 4 + 1).unwrap(),
    from_ymd(2010, 1, 1)
);
assert_eq!(
    from_ymd(2014, 1, 1) - TimeDelta::try_days(365 * 400 + 97).unwrap(),
    from_ymd(1614, 1, 1)
);
Source§

impl Sub<TimeDelta> for NaiveDateTime

Subtract TimeDelta from NaiveDateTime.

This is the same as the addition with a negated TimeDelta.

As a part of Chrono’s leap second handling the subtraction assumes that there is no leap second ever, except when the NaiveDateTime itself represents a leap second in which case the assumption becomes that there is exactly a single leap second ever.

§Panics

Panics if the resulting date would be out of range. Consider using NaiveDateTime::checked_sub_signed to get an Option instead.

§Example

use chrono::{NaiveDate, TimeDelta};

let from_ymd = |y, m, d| NaiveDate::from_ymd_opt(y, m, d).unwrap();

let d = from_ymd(2016, 7, 8);
let hms = |h, m, s| d.and_hms_opt(h, m, s).unwrap();
assert_eq!(hms(3, 5, 7) - TimeDelta::zero(), hms(3, 5, 7));
assert_eq!(hms(3, 5, 7) - TimeDelta::try_seconds(1).unwrap(), hms(3, 5, 6));
assert_eq!(hms(3, 5, 7) - TimeDelta::try_seconds(-1).unwrap(), hms(3, 5, 8));
assert_eq!(hms(3, 5, 7) - TimeDelta::try_seconds(3600 + 60).unwrap(), hms(2, 4, 7));
assert_eq!(
    hms(3, 5, 7) - TimeDelta::try_seconds(86_400).unwrap(),
    from_ymd(2016, 7, 7).and_hms_opt(3, 5, 7).unwrap()
);
assert_eq!(
    hms(3, 5, 7) - TimeDelta::try_days(365).unwrap(),
    from_ymd(2015, 7, 9).and_hms_opt(3, 5, 7).unwrap()
);

let hmsm = |h, m, s, milli| d.and_hms_milli_opt(h, m, s, milli).unwrap();
assert_eq!(hmsm(3, 5, 7, 450) - TimeDelta::try_milliseconds(670).unwrap(), hmsm(3, 5, 6, 780));

Leap seconds are handled, but the subtraction assumes that it is the only leap second happened.

let leap = hmsm(3, 5, 59, 1_300);
assert_eq!(leap - TimeDelta::zero(), hmsm(3, 5, 59, 1_300));
assert_eq!(leap - TimeDelta::try_milliseconds(200).unwrap(), hmsm(3, 5, 59, 1_100));
assert_eq!(leap - TimeDelta::try_milliseconds(500).unwrap(), hmsm(3, 5, 59, 800));
assert_eq!(leap - TimeDelta::try_seconds(60).unwrap(), hmsm(3, 5, 0, 300));
assert_eq!(leap - TimeDelta::try_days(1).unwrap(),
           from_ymd(2016, 7, 7).and_hms_milli_opt(3, 6, 0, 300).unwrap());
Source§

impl Sub<TimeDelta> for NaiveTime

Subtract TimeDelta from NaiveTime.

This wraps around and never overflows or underflows. In particular the subtraction ignores integral number of days. This is the same as addition with a negated TimeDelta.

As a part of Chrono’s leap second handling, the subtraction assumes that there is no leap second ever, except when the NaiveTime itself represents a leap second in which case the assumption becomes that there is exactly a single leap second ever.

§Example

use chrono::{NaiveTime, TimeDelta};

let from_hmsm = |h, m, s, milli| NaiveTime::from_hms_milli_opt(h, m, s, milli).unwrap();

assert_eq!(from_hmsm(3, 5, 7, 0) - TimeDelta::zero(), from_hmsm(3, 5, 7, 0));
assert_eq!(from_hmsm(3, 5, 7, 0) - TimeDelta::try_seconds(1).unwrap(), from_hmsm(3, 5, 6, 0));
assert_eq!(
    from_hmsm(3, 5, 7, 0) - TimeDelta::try_seconds(60 + 5).unwrap(),
    from_hmsm(3, 4, 2, 0)
);
assert_eq!(
    from_hmsm(3, 5, 7, 0) - TimeDelta::try_seconds(2 * 60 * 60 + 6 * 60).unwrap(),
    from_hmsm(0, 59, 7, 0)
);
assert_eq!(
    from_hmsm(3, 5, 7, 0) - TimeDelta::try_milliseconds(80).unwrap(),
    from_hmsm(3, 5, 6, 920)
);
assert_eq!(
    from_hmsm(3, 5, 7, 950) - TimeDelta::try_milliseconds(280).unwrap(),
    from_hmsm(3, 5, 7, 670)
);

The subtraction wraps around.

assert_eq!(from_hmsm(3, 5, 7, 0) - TimeDelta::try_seconds(8*60*60).unwrap(), from_hmsm(19, 5, 7, 0));
assert_eq!(from_hmsm(3, 5, 7, 0) - TimeDelta::try_days(800).unwrap(), from_hmsm(3, 5, 7, 0));

Leap seconds are handled, but the subtraction assumes that it is the only leap second happened.

let leap = from_hmsm(3, 5, 59, 1_300);
assert_eq!(leap - TimeDelta::zero(), from_hmsm(3, 5, 59, 1_300));
assert_eq!(leap - TimeDelta::try_milliseconds(200).unwrap(), from_hmsm(3, 5, 59, 1_100));
assert_eq!(leap - TimeDelta::try_milliseconds(500).unwrap(), from_hmsm(3, 5, 59, 800));
assert_eq!(leap - TimeDelta::try_seconds(60).unwrap(), from_hmsm(3, 5, 0, 300));
assert_eq!(leap - TimeDelta::try_days(1).unwrap(), from_hmsm(3, 6, 0, 300));
Source§

impl Sub<bf16> for &bf16

Source§

impl Sub<f16> for &f16

Source§

impl Sub<BigInt> for &i8

Source§

impl Sub<BigInt> for &i16

Source§

impl Sub<BigInt> for &i32

Source§

impl Sub<BigInt> for &i64

Source§

impl Sub<BigInt> for &i128

Source§

impl Sub<BigInt> for &isize

Source§

impl Sub<BigInt> for &u8

Source§

impl Sub<BigInt> for &u16

Source§

impl Sub<BigInt> for &u32

Source§

impl Sub<BigInt> for &u64

Source§

impl Sub<BigInt> for &u128

Source§

impl Sub<BigInt> for &usize

Source§

impl Sub<BigInt> for &BigInt

§

impl Sub<BigInt> for &BigDecimal

§

type Output = BigDecimal

Source§

impl Sub<BigInt> for i8

Source§

impl Sub<BigInt> for i16

Source§

impl Sub<BigInt> for i32

Source§

impl Sub<BigInt> for i64

Source§

impl Sub<BigInt> for i128

Source§

impl Sub<BigInt> for isize

Source§

impl Sub<BigInt> for u8

Source§

impl Sub<BigInt> for u16

Source§

impl Sub<BigInt> for u32

Source§

impl Sub<BigInt> for u64

Source§

impl Sub<BigInt> for u128

Source§

impl Sub<BigInt> for usize

§

impl Sub<BigInt> for BigDecimal

§

type Output = BigDecimal

§

impl Sub<BigInt> for BigDecimalRef<'_>

§

type Output = BigDecimal

Source§

impl Sub<BigUint> for &u8

Source§

impl Sub<BigUint> for &u16

Source§

impl Sub<BigUint> for &u32

Source§

impl Sub<BigUint> for &u64

Source§

impl Sub<BigUint> for &u128

Source§

impl Sub<BigUint> for &usize

Source§

impl Sub<BigUint> for &BigUint

Source§

impl Sub<BigUint> for u8

Source§

impl Sub<BigUint> for u16

Source§

impl Sub<BigUint> for u32

Source§

impl Sub<BigUint> for u64

Source§

impl Sub<BigUint> for u128

Source§

impl Sub<BigUint> for usize

Source§

impl Sub<Complex<f32>> for f32

Source§

impl Sub<Complex<f64>> for f64

Source§

impl Sub<Complex<i8>> for i8

Source§

impl Sub<Complex<i16>> for i16

Source§

impl Sub<Complex<i32>> for i32

Source§

impl Sub<Complex<i64>> for i64

Source§

impl Sub<Complex<i128>> for i128

Source§

impl Sub<Complex<isize>> for isize

Source§

impl Sub<Complex<u8>> for u8

Source§

impl Sub<Complex<u16>> for u16

Source§

impl Sub<Complex<u32>> for u32

Source§

impl Sub<Complex<u64>> for u64

Source§

impl Sub<Complex<u128>> for u128

Source§

impl Sub<Complex<usize>> for usize

Source§

impl Sub<B0> for UTerm

UTerm - B0 = Term

Source§

impl Sub<B1> for UInt<UTerm, B1>

UInt<UTerm, B1> - B1 = UTerm

§

impl Sub<BigDecimal> for &i8

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for &i16

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for &i32

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for &i64

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for &i128

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for &u8

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for &u16

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for &u32

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for &u64

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for &u128

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for &BigInt

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for &BigDecimal

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for i8

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for i16

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for i32

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for i64

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for i128

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for u8

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for u16

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for u32

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for u64

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for u128

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for BigInt

§

type Output = BigDecimal

§

impl Sub<BigDecimal> for BigDecimalRef<'_>

§

type Output = BigDecimal

§

impl<'a> Sub<&'a IntervalDayTime> for IntervalDayTime

§

impl<'a> Sub<&'a IntervalMonthDayNano> for IntervalMonthDayNano

§

impl<'a> Sub<&'a i256> for i256

§

type Output = i256

Source§

impl<'a> Sub<&'a Complex<f32>> for f32

Source§

impl<'a> Sub<&'a Complex<f64>> for f64

Source§

impl<'a> Sub<&'a Complex<i8>> for i8

Source§

impl<'a> Sub<&'a Complex<i16>> for i16

Source§

impl<'a> Sub<&'a Complex<i32>> for i32

Source§

impl<'a> Sub<&'a Complex<i64>> for i64

Source§

impl<'a> Sub<&'a Complex<i128>> for i128

Source§

impl<'a> Sub<&'a Complex<isize>> for isize

Source§

impl<'a> Sub<&'a Complex<u8>> for u8

Source§

impl<'a> Sub<&'a Complex<u16>> for u16

Source§

impl<'a> Sub<&'a Complex<u32>> for u32

Source§

impl<'a> Sub<&'a Complex<u64>> for u64

Source§

impl<'a> Sub<&'a Complex<u128>> for u128

Source§

impl<'a> Sub<&'a Complex<usize>> for usize

§

impl<'a> Sub<IntervalDayTime> for &'a IntervalDayTime

§

impl<'a> Sub<IntervalMonthDayNano> for &'a IntervalMonthDayNano

§

impl<'a> Sub<i256> for &'a i256

§

type Output = i256

Source§

impl<'a> Sub<Complex<f32>> for &'a f32

Source§

impl<'a> Sub<Complex<f64>> for &'a f64

Source§

impl<'a> Sub<Complex<i8>> for &'a i8

Source§

impl<'a> Sub<Complex<i16>> for &'a i16

Source§

impl<'a> Sub<Complex<i32>> for &'a i32

Source§

impl<'a> Sub<Complex<i64>> for &'a i64

Source§

impl<'a> Sub<Complex<i128>> for &'a i128

Source§

impl<'a> Sub<Complex<isize>> for &'a isize

Source§

impl<'a> Sub<Complex<u8>> for &'a u8

Source§

impl<'a> Sub<Complex<u16>> for &'a u16

Source§

impl<'a> Sub<Complex<u32>> for &'a u32

Source§

impl<'a> Sub<Complex<u64>> for &'a u64

Source§

impl<'a> Sub<Complex<u128>> for &'a u128

Source§

impl<'a> Sub<Complex<usize>> for &'a usize

§

impl<'a> Sub<BigDecimalRef<'a>> for &BigInt

§

type Output = BigDecimal

§

impl<'a> Sub<BigDecimalRef<'a>> for BigInt

§

type Output = BigDecimal

Source§

impl<'a, 'b> Sub<&'a Complex<f32>> for &'b f32

Source§

impl<'a, 'b> Sub<&'a Complex<f64>> for &'b f64

Source§

impl<'a, 'b> Sub<&'a Complex<i8>> for &'b i8

Source§

impl<'a, 'b> Sub<&'a Complex<i16>> for &'b i16

Source§

impl<'a, 'b> Sub<&'a Complex<i32>> for &'b i32

Source§

impl<'a, 'b> Sub<&'a Complex<i64>> for &'b i64

Source§

impl<'a, 'b> Sub<&'a Complex<i128>> for &'b i128

Source§

impl<'a, 'b> Sub<&'a Complex<isize>> for &'b isize

Source§

impl<'a, 'b> Sub<&'a Complex<u8>> for &'b u8

Source§

impl<'a, 'b> Sub<&'a Complex<u16>> for &'b u16

Source§

impl<'a, 'b> Sub<&'a Complex<u32>> for &'b u32

Source§

impl<'a, 'b> Sub<&'a Complex<u64>> for &'b u64

Source§

impl<'a, 'b> Sub<&'a Complex<u128>> for &'b u128

Source§

impl<'a, 'b> Sub<&'a Complex<usize>> for &'b usize

§

impl<'a, 'b> Sub<&'b IntervalDayTime> for &'a IntervalDayTime

§

impl<'a, 'b> Sub<&'b IntervalMonthDayNano> for &'a IntervalMonthDayNano

§

impl<'a, 'b> Sub<&'b i256> for &'a i256

§

type Output = i256

Source§

impl<'a, 'b, T> Sub<&'b Complex<T>> for &'a Complex<T>
where T: Clone + Num,

Source§

impl<'a, 'b, T> Sub<&'a T> for &'b Complex<T>
where T: Clone + Num,

§

impl<'a, K, V, S, Q> Sub<&Q> for &'a DashMap<K, V, S>
where K: 'a + Eq + Hash + Borrow<Q>, V: 'a, S: BuildHasher + Clone, Q: Hash + Eq + ?Sized,

§

impl<'a, T> Sub for &'a OrderedFloat<T>
where &'a T: Sub,

§

type Output = OrderedFloat<<&'a T as Sub>::Output>

Source§

impl<'a, T> Sub<&'a Complex<T>> for Complex<T>
where T: Clone + Num,

§

impl<'a, T> Sub<&'a OrderedFloat<T>> for OrderedFloat<T>
where T: Sub<&'a T>,

§

type Output = OrderedFloat<<T as Sub<&'a T>>::Output>

§

impl<'a, T> Sub<&'a T> for &'a OrderedFloat<T>
where &'a T: Sub,

§

type Output = OrderedFloat<<&'a T as Sub>::Output>

Source§

impl<'a, T> Sub<&'a T> for Complex<T>
where T: Clone + Num,

§

impl<'a, T> Sub<&'a T> for OrderedFloat<T>
where T: Sub<&'a T>,

§

type Output = OrderedFloat<<T as Sub<&'a T>>::Output>

Source§

impl<'a, T> Sub<Complex<T>> for &'a Complex<T>
where T: Clone + Num,

§

impl<'a, T> Sub<OrderedFloat<T>> for &'a OrderedFloat<T>
where &'a T: Sub<T>,

§

type Output = OrderedFloat<<&'a T as Sub<T>>::Output>

Source§

impl<'a, T> Sub<T> for &'a Complex<T>
where T: Clone + Num,

§

impl<'a, T> Sub<T> for &'a OrderedFloat<T>
where &'a T: Sub<T>,

§

type Output = OrderedFloat<<&'a T as Sub<T>>::Output>

§

impl<'a, T> Sub<T> for &BigDecimal
where T: Into<BigDecimalRef<'a>>,

§

type Output = BigDecimal

§

impl<'a, T> Sub<T> for BigDecimal
where T: Into<BigDecimalRef<'a>>,

§

type Output = BigDecimal

§

impl<'a, T> Sub<T> for BigDecimalRef<'_>
where T: Into<BigDecimalRef<'a>>,

§

type Output = BigDecimal

Source§

impl<'lhs, 'rhs, T, const N: usize> Sub<&'rhs Simd<T, N>> for &'lhs Simd<T, N>
where T: SimdElement, Simd<T, N>: Sub<Output = Simd<T, N>>, LaneCount<N>: SupportedLaneCount,

Source§

type Output = Simd<T, N>

§

impl<O> Sub for F32<O>
where O: ByteOrder,

§

type Output = F32<O>

§

impl<O> Sub for F64<O>
where O: ByteOrder,

§

type Output = F64<O>

§

impl<O> Sub for I16<O>
where O: ByteOrder,

§

type Output = I16<O>

§

impl<O> Sub for I32<O>
where O: ByteOrder,

§

type Output = I32<O>

§

impl<O> Sub for I64<O>
where O: ByteOrder,

§

type Output = I64<O>

§

impl<O> Sub for I128<O>
where O: ByteOrder,

§

type Output = I128<O>

§

impl<O> Sub for Isize<O>
where O: ByteOrder,

§

type Output = Isize<O>

§

impl<O> Sub for U16<O>
where O: ByteOrder,

§

type Output = U16<O>

§

impl<O> Sub for U32<O>
where O: ByteOrder,

§

type Output = U32<O>

§

impl<O> Sub for U64<O>
where O: ByteOrder,

§

type Output = U64<O>

§

impl<O> Sub for U128<O>
where O: ByteOrder,

§

type Output = U128<O>

§

impl<O> Sub for Usize<O>
where O: ByteOrder,

§

type Output = Usize<O>

§

impl<O> Sub<f32> for F32<O>
where O: ByteOrder,

§

type Output = F32<O>

§

impl<O> Sub<f64> for F64<O>
where O: ByteOrder,

§

type Output = F64<O>

§

impl<O> Sub<i16> for I16<O>
where O: ByteOrder,

§

type Output = I16<O>

§

impl<O> Sub<i32> for I32<O>
where O: ByteOrder,

§

type Output = I32<O>

§

impl<O> Sub<i64> for I64<O>
where O: ByteOrder,

§

type Output = I64<O>

§

impl<O> Sub<i128> for I128<O>
where O: ByteOrder,

§

type Output = I128<O>

§

impl<O> Sub<isize> for Isize<O>
where O: ByteOrder,

§

type Output = Isize<O>

§

impl<O> Sub<u16> for U16<O>
where O: ByteOrder,

§

type Output = U16<O>

§

impl<O> Sub<u32> for U32<O>
where O: ByteOrder,

§

type Output = U32<O>

§

impl<O> Sub<u64> for U64<O>
where O: ByteOrder,

§

type Output = U64<O>

§

impl<O> Sub<u128> for U128<O>
where O: ByteOrder,

§

type Output = U128<O>

§

impl<O> Sub<usize> for Usize<O>
where O: ByteOrder,

§

type Output = Usize<O>

§

impl<O> Sub<F32<O>> for f32
where O: ByteOrder,

§

type Output = F32<O>

§

impl<O> Sub<F64<O>> for f64
where O: ByteOrder,

§

type Output = F64<O>

§

impl<O> Sub<I16<O>> for i16
where O: ByteOrder,

§

type Output = I16<O>

§

impl<O> Sub<I32<O>> for i32
where O: ByteOrder,

§

type Output = I32<O>

§

impl<O> Sub<I64<O>> for i64
where O: ByteOrder,

§

type Output = I64<O>

§

impl<O> Sub<I128<O>> for i128
where O: ByteOrder,

§

type Output = I128<O>

§

impl<O> Sub<Isize<O>> for isize
where O: ByteOrder,

§

type Output = Isize<O>

§

impl<O> Sub<U16<O>> for u16
where O: ByteOrder,

§

type Output = U16<O>

§

impl<O> Sub<U32<O>> for u32
where O: ByteOrder,

§

type Output = U32<O>

§

impl<O> Sub<U64<O>> for u64
where O: ByteOrder,

§

type Output = U64<O>

§

impl<O> Sub<U128<O>> for u128
where O: ByteOrder,

§

type Output = U128<O>

§

impl<O> Sub<Usize<O>> for usize
where O: ByteOrder,

§

type Output = Usize<O>

§

impl<T> Sub for &NotNan<T>
where T: Float,

§

type Output = NotNan<T>

Source§

impl<T> Sub for Complex<T>
where T: Clone + Num,

§

impl<T> Sub for NotNan<T>
where T: Float,

§

type Output = NotNan<T>

§

impl<T> Sub for OrderedFloat<T>
where T: Sub,

§

type Output = OrderedFloat<<T as Sub>::Output>

§

impl<T> Sub<&NotNan<T>> for NotNan<T>
where T: Float,

§

type Output = NotNan<T>

§

impl<T> Sub<&T> for &NotNan<T>
where T: Float,

§

type Output = NotNan<T>

§

impl<T> Sub<&T> for NotNan<T>
where T: Float,

§

type Output = NotNan<T>

§

impl<T> Sub<NotNan<T>> for &NotNan<T>
where T: Float,

§

type Output = NotNan<T>

§

impl<T> Sub<T> for &NotNan<T>
where T: Float,

§

type Output = NotNan<T>

Source§

impl<T> Sub<T> for Complex<T>
where T: Clone + Num,

§

impl<T> Sub<T> for NotNan<T>
where T: Float,

Subtracts a float directly.

Panics if the provided value is NaN or the computation results in NaN

§

type Output = NotNan<T>

§

impl<T> Sub<T> for OrderedFloat<T>
where T: Sub,

§

type Output = OrderedFloat<<T as Sub>::Output>

1.0.0 · Source§

impl<T, A> Sub<&BTreeSet<T, A>> for &BTreeSet<T, A>
where T: Ord + Clone, A: Allocator + Clone,

§

impl<T, S1, S2> Sub<&IndexSet<T, S2>> for &IndexSet<T, S1>
where T: Eq + Hash + Clone, S1: BuildHasher + Default, S2: BuildHasher,

§

type Output = IndexSet<T, S1>

§

impl<T, S> Sub<&HashSet<T, S>> for &datafusion::common::hashbrown::HashSet<T, S>
where T: Eq + Hash + Clone, S: BuildHasher + Default,

§

type Output = HashSet<T, S>

1.0.0 · Source§

impl<T, S> Sub<&HashSet<T, S>> for &std::collections::hash::set::HashSet<T, S>
where T: Eq + Hash + Clone, S: BuildHasher + Default,

Source§

type Output = HashSet<T, S>

§

impl<T, S, A> Sub<&HashSet<T, S, A>> for &HashSet<T, S, A>
where T: Eq + Hash + Clone, S: BuildHasher + Default, A: Allocator + Default,

§

type Output = HashSet<T, S, A>

§

impl<T, S, A> Sub<&HashSet<T, S, A>> for &HashSet<T, S, A>
where T: Eq + Hash + Clone, S: BuildHasher + Default, A: Allocator + Default,

§

type Output = HashSet<T, S, A>

Source§

impl<T, const N: usize> Sub<&Simd<T, N>> for Simd<T, N>
where T: SimdElement, Simd<T, N>: Sub<Output = Simd<T, N>>, LaneCount<N>: SupportedLaneCount,

Source§

type Output = Simd<T, N>

Source§

impl<T, const N: usize> Sub<Simd<T, N>> for &Simd<T, N>
where T: SimdElement, Simd<T, N>: Sub<Output = Simd<T, N>>, LaneCount<N>: SupportedLaneCount,

Source§

type Output = Simd<T, N>

Source§

impl<Tz> Sub for Date<Tz>
where Tz: TimeZone,

Source§

impl<Tz> Sub for DateTime<Tz>
where Tz: TimeZone,

Source§

impl<Tz> Sub<&DateTime<Tz>> for DateTime<Tz>
where Tz: TimeZone,

Source§

impl<Tz> Sub<Duration> for DateTime<Tz>
where Tz: TimeZone,

Subtract std::time::Duration from DateTime.

As a part of Chrono’s [leap second handling] the subtraction assumes that there is no leap second ever, except when the DateTime itself represents a leap second in which case the assumption becomes that there is exactly a single leap second ever.

§Panics

Panics if the resulting date would be out of range. Consider using DateTime<Tz>::checked_sub_signed to get an Option instead.

Source§

impl<Tz> Sub<Months> for DateTime<Tz>
where Tz: TimeZone,

Subtract Months from DateTime.

The result will be clamped to valid days in the resulting month, see DateTime<Tz>::checked_sub_months for details.

§Panics

Panics if:

  • The resulting date would be out of range.
  • The local time at the resulting date does not exist or is ambiguous, for example during a daylight saving time transition.

Strongly consider using DateTime<Tz>::checked_sub_months to get an Option instead.

Source§

impl<Tz> Sub<Days> for DateTime<Tz>
where Tz: TimeZone,

Subtract Days from DateTime.

§Panics

Panics if:

  • The resulting date would be out of range.
  • The local time at the resulting date does not exist or is ambiguous, for example during a daylight saving time transition.

Strongly consider using DateTime<Tz>::checked_sub_days to get an Option instead.

Source§

impl<Tz> Sub<FixedOffset> for DateTime<Tz>
where Tz: TimeZone,

Subtract FixedOffset from the datetime value of DateTime (offset remains unchanged).

§Panics

Panics if the resulting date would be out of range.

Source§

impl<Tz> Sub<TimeDelta> for Date<Tz>
where Tz: TimeZone,

Source§

type Output = Date<Tz>

Source§

impl<Tz> Sub<TimeDelta> for DateTime<Tz>
where Tz: TimeZone,

Subtract TimeDelta from DateTime.

This is the same as the addition with a negated TimeDelta.

As a part of Chrono’s [leap second handling] the subtraction assumes that there is no leap second ever, except when the DateTime itself represents a leap second in which case the assumption becomes that there is exactly a single leap second ever.

§Panics

Panics if the resulting date would be out of range. Consider using DateTime<Tz>::checked_sub_signed to get an Option instead.

Source§

impl<U> Sub<B1> for UInt<U, B0>
where U: Unsigned + Sub<B1>, <U as Sub<B1>>::Output: Unsigned,

UInt<U, B0> - B1 = UInt<U - B1, B1>

Source§

type Output = UInt<<U as Sub<B1>>::Output, B1>

Source§

impl<U> Sub<NInt<U>> for Z0
where U: Unsigned + NonZero,

Z0 - N = P

Source§

impl<U> Sub<PInt<U>> for Z0
where U: Unsigned + NonZero,

Z0 - P = N

Source§

impl<U> Sub<Z0> for NInt<U>
where U: Unsigned + NonZero,

NInt - Z0 = NInt

Source§

impl<U> Sub<Z0> for PInt<U>
where U: Unsigned + NonZero,

PInt - Z0 = PInt

Source§

impl<U, B> Sub<B0> for UInt<U, B>
where U: Unsigned, B: Bit,

UInt - B0 = UInt

Source§

type Output = UInt<U, B>

Source§

impl<U, B> Sub<B1> for UInt<UInt<U, B>, B1>
where U: Unsigned, B: Bit,

UInt<U, B1> - B1 = UInt<U, B0>

Source§

type Output = UInt<UInt<U, B>, B0>

Source§

impl<Ul, Bl, Ur> Sub<Ur> for UInt<Ul, Bl>
where Ul: Unsigned, Bl: Bit, Ur: Unsigned, UInt<Ul, Bl>: PrivateSub<Ur>, <UInt<Ul, Bl> as PrivateSub<Ur>>::Output: Trim,

Subtracting unsigned integers. We just do our PrivateSub and then Trim the output.

Source§

type Output = <<UInt<Ul, Bl> as PrivateSub<Ur>>::Output as Trim>::Output

Source§

impl<Ul, Ur> Sub<NInt<Ur>> for NInt<Ul>
where Ul: Unsigned + NonZero, Ur: Unsigned + NonZero + Cmp<Ul> + PrivateIntegerAdd<<Ur as Cmp<Ul>>::Output, Ul>,

N(Ul) - N(Ur): We resolve this with our PrivateAdd

Source§

type Output = <Ur as PrivateIntegerAdd<<Ur as Cmp<Ul>>::Output, Ul>>::Output

Source§

impl<Ul, Ur> Sub<NInt<Ur>> for PInt<Ul>
where Ul: Unsigned + NonZero + Add<Ur>, Ur: Unsigned + NonZero, <Ul as Add<Ur>>::Output: Unsigned + NonZero,

P(Ul) - N(Ur) = P(Ul + Ur)

Source§

type Output = PInt<<Ul as Add<Ur>>::Output>

Source§

impl<Ul, Ur> Sub<PInt<Ur>> for NInt<Ul>
where Ul: Unsigned + NonZero + Add<Ur>, Ur: Unsigned + NonZero, <Ul as Add<Ur>>::Output: Unsigned + NonZero,

N(Ul) - P(Ur) = N(Ul + Ur)

Source§

type Output = NInt<<Ul as Add<Ur>>::Output>

Source§

impl<Ul, Ur> Sub<PInt<Ur>> for PInt<Ul>
where Ul: Unsigned + NonZero + Cmp<Ur> + PrivateIntegerAdd<<Ul as Cmp<Ur>>::Output, Ur>, Ur: Unsigned + NonZero,

P(Ul) - P(Ur): We resolve this with our PrivateAdd

Source§

type Output = <Ul as PrivateIntegerAdd<<Ul as Cmp<Ur>>::Output, Ur>>::Output

Source§

impl<Vl, Al, Vr, Ar> Sub<TArr<Vr, Ar>> for TArr<Vl, Al>
where Vl: Sub<Vr>, Al: Sub<Ar>,

Source§

type Output = TArr<<Vl as Sub<Vr>>::Output, <Al as Sub<Ar>>::Output>

Source§

impl<const N: usize> Sub for Simd<f32, N>

Source§

impl<const N: usize> Sub for Simd<f64, N>

Source§

impl<const N: usize> Sub for Simd<i8, N>

Source§

impl<const N: usize> Sub for Simd<i16, N>

Source§

impl<const N: usize> Sub for Simd<i32, N>

Source§

impl<const N: usize> Sub for Simd<i64, N>

Source§

impl<const N: usize> Sub for Simd<isize, N>

Source§

impl<const N: usize> Sub for Simd<u8, N>

Source§

impl<const N: usize> Sub for Simd<u16, N>

Source§

impl<const N: usize> Sub for Simd<u32, N>

Source§

impl<const N: usize> Sub for Simd<u64, N>

Source§

impl<const N: usize> Sub for Simd<usize, N>