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§

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

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 Instant

Source§

impl Sub for ab_glyph_rasterizer::geometry::Point

Source§

impl Sub for Sides

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 PollOpt

Source§

impl Sub for UnixReady

Source§

impl Sub for AtFlags

Source§

impl Sub for FallocateFlags

Source§

impl Sub for nix::fcntl::FdFlag

Source§

impl Sub for OFlag

Source§

impl Sub for SealFlag

Source§

impl Sub for SpliceFFlags

Source§

impl Sub for DeleteModuleFlags

Source§

impl Sub for ModuleInitFlags

Source§

impl Sub for MntFlags

Source§

impl Sub for nix::mount::MsFlags

Source§

impl Sub for nix::mqueue::FdFlag

Source§

impl Sub for MQ_OFlag

Source§

impl Sub for InterfaceFlags

Source§

impl Sub for PollFlags

Source§

impl Sub for CloneFlags

Source§

impl Sub for EpollCreateFlags

Source§

impl Sub for EpollFlags

Source§

impl Sub for EfdFlags

Source§

impl Sub for AddWatchFlags

Source§

impl Sub for InitFlags

Source§

impl Sub for MemFdCreateFlag

Source§

impl Sub for MapFlags

Source§

impl Sub for MlockAllFlags

Source§

impl Sub for nix::sys::mman::MsFlags

Source§

impl Sub for ProtFlags

Source§

impl Sub for Options

Source§

impl Sub for QuotaValidFlags

Source§

impl Sub for SaFlags

Source§

impl Sub for SfdFlags

Source§

impl Sub for MsgFlags

Source§

impl Sub for SockFlag

Source§

impl Sub for nix::sys::stat::Mode

Source§

impl Sub for SFlag

Source§

impl Sub for FsFlags

Source§

impl Sub for ControlFlags

Source§

impl Sub for InputFlags

Source§

impl Sub for LocalFlags

Source§

impl Sub for OutputFlags

Source§

impl Sub for TimeSpec

Source§

impl Sub for TimeVal

Source§

impl Sub for WaitPidFlag

Source§

impl Sub for AccessFlags

Source§

impl Sub for Transformations

Source§

impl Sub for Extensions

Source§

impl Sub for DndAction

Source§

impl Sub for wayland_client::protocol::wl_output::Mode

Source§

impl Sub for Capability

Source§

impl Sub for Resize

Source§

impl Sub for Transient

Source§

impl Sub for wayland_protocols::stable::xdg_shell::generated::client::xdg_positioner::ConstraintAdjustment

Source§

impl Sub for ContentHint

Source§

impl Sub for wayland_protocols::unstable::xdg_shell::v6::generated::client::zxdg_positioner_v6::Anchor

Source§

impl Sub for wayland_protocols::unstable::xdg_shell::v6::generated::client::zxdg_positioner_v6::ConstraintAdjustment

Source§

impl Sub for Gravity

Source§

impl Sub for wayland_protocols::wlr::unstable::layer_shell::v1::generated::client::zwlr_layer_surface_v1::Anchor

Source§

impl Sub for Flags

Source§

impl Sub for ModifiersState

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

1.0.0 (const: unstable) · Source§

impl Sub<&i8> for i8

1.0.0 (const: unstable) · Source§

impl Sub<&i16> for &i16

1.0.0 (const: unstable) · Source§

impl Sub<&i16> for i16

1.0.0 (const: unstable) · Source§

impl Sub<&i32> for &i32

1.0.0 (const: unstable) · Source§

impl Sub<&i32> for i32

1.0.0 (const: unstable) · Source§

impl Sub<&i64> for &i64

1.0.0 (const: unstable) · Source§

impl Sub<&i64> for i64

1.0.0 (const: unstable) · Source§

impl Sub<&i128> for &i128

1.0.0 (const: unstable) · Source§

impl Sub<&i128> for i128

1.0.0 (const: unstable) · Source§

impl Sub<&isize> for &isize

1.0.0 (const: unstable) · Source§

impl Sub<&isize> for isize

1.0.0 (const: unstable) · Source§

impl Sub<&u8> for &u8

1.0.0 (const: unstable) · Source§

impl Sub<&u8> for u8

1.0.0 (const: unstable) · Source§

impl Sub<&u16> for &u16

1.0.0 (const: unstable) · Source§

impl Sub<&u16> for u16

1.0.0 (const: unstable) · Source§

impl Sub<&u32> for &u32

1.0.0 (const: unstable) · Source§

impl Sub<&u32> for u32

1.0.0 (const: unstable) · Source§

impl Sub<&u64> for &u64

1.0.0 (const: unstable) · Source§

impl Sub<&u64> for u64

1.0.0 (const: unstable) · Source§

impl Sub<&u128> for &u128

1.0.0 (const: unstable) · Source§

impl Sub<&u128> for u128

1.0.0 (const: unstable) · Source§

impl Sub<&usize> for &usize

1.0.0 (const: unstable) · Source§

impl Sub<&usize> for usize

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>

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

1.0.0 (const: unstable) · Source§

impl Sub<i16> for &i16

1.0.0 (const: unstable) · Source§

impl Sub<i32> for &i32

1.0.0 (const: unstable) · Source§

impl Sub<i64> for &i64

1.0.0 (const: unstable) · Source§

impl Sub<i128> for &i128

1.0.0 (const: unstable) · Source§

impl Sub<isize> for &isize

1.0.0 (const: unstable) · Source§

impl Sub<u8> for &u8

1.0.0 (const: unstable) · Source§

impl Sub<u16> for &u16

1.0.0 (const: unstable) · Source§

impl Sub<u32> for &u32

1.0.0 (const: unstable) · Source§

impl Sub<u64> for &u64

1.0.0 (const: unstable) · Source§

impl Sub<u128> for &u128

1.0.0 (const: unstable) · Source§

impl Sub<usize> for &usize

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 Instant

1.8.0 (const: unstable) · 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.

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<'a, 'b, T> Sub<&'b Ratio<T>> for &'a Ratio<T>
where T: Clone + Integer,

Source§

impl<'a, 'b, T> Sub<&'b T> for &'a Ratio<T>
where T: Clone + Integer,

Source§

impl<'a, T> Sub<&'a Ratio<T>> for Ratio<T>
where T: Clone + Integer,

Source§

impl<'a, T> Sub<&'a T> for Ratio<T>
where T: Clone + Integer,

Source§

impl<'a, T> Sub<Ratio<T>> for &'a Ratio<T>
where T: Clone + Integer,

Source§

impl<'a, T> Sub<T> for &'a Ratio<T>
where T: Clone + Integer,

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>

Source§

impl<N> Sub for rusttype::geometry::Point<N>
where N: Sub<Output = N>,

Source§

impl<N> Sub for rusttype::geometry::Point<N>
where N: Sub<Output = N>,

Source§

impl<N> Sub for rusttype::geometry::Vector<N>
where N: Sub<Output = N>,

Source§

impl<N> Sub for rusttype::geometry::Vector<N>
where N: Sub<Output = N>,

Source§

impl<N> Sub<Vector<N>> for rusttype::geometry::Point<N>
where N: Sub<Output = N>,

Source§

impl<N> Sub<Vector<N>> for rusttype::geometry::Point<N>
where N: Sub<Output = N>,

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

impl<T> Sub for Ratio<T>
where T: Clone + Integer,

Source§

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

Source§

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

Source§

impl<T> Sub for Mat4<T>
where T: Num + Copy,

Source§

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

Source§

impl<T> Sub for Vec2<T>
where T: Sub<Output = T>,

Source§

impl<T> Sub for Vec3<T>
where T: Sub<Output = T>,

Source§

impl<T> Sub for Vec4<T>
where T: Sub<Output = T>,

Source§

impl<T> Sub<T> for Ready
where T: Into<Ready>,

Source§

impl<T> Sub<T> for Ratio<T>
where T: Clone + Integer,

Source§

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

Subtracts a float directly.

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

1.0.0 · Source§

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

1.0.0 · Source§

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

Source§

type Output = HashSet<T, S>

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<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>