[][src]Module embedded_time::duration::time_units

Implementations of the Duration trait.

Constructing a duration

assert_eq!(Milliseconds::<i32>::new(23), Milliseconds(23_i32));
assert_eq!(Milliseconds(23), 23.milliseconds());

Get the integer count

assert_eq!(Milliseconds(23).count(), 23);

Formatting

Just forwards the underlying integer to core::fmt::Display::fmt()

assert_eq!(format!("{}", Seconds(123)), "123");

Add/Sub

Panics

Panics if the rhs duration cannot be converted into the lhs duration type

In this example, the maximum i32 value of seconds is stored as i32 and converting that value to milliseconds (with i32 storage type) causes an overflow.

let _ = Milliseconds(24) + Seconds(i32::MAX);

This example works just fine as the seconds value is first cast to i64, then converted to milliseconds.

let _ = Milliseconds(24_i64) + Seconds(i32::MAX);

Here, there is no units conversion to worry about, but i32::MAX + 1 cannot be cast to an i32.

let _ = Seconds(i32::MAX) - Seconds(i32::MAX as i64 + 1);

Examples

assert_eq!((Milliseconds(3_234) - Seconds(2)), Milliseconds(1_234));
assert_eq!((Milliseconds(3_234_i64) - Seconds(2_i32)), Milliseconds(1_234_i64));
assert_eq!((Seconds(i32::MAX) - Milliseconds((i32::MAX as i64) + 1)), Seconds(2_145_336_164_i32));

Equality

assert_eq!(Seconds(123), Seconds(123));
assert_eq!(Seconds(123), Milliseconds(123_000));
assert_ne!(Seconds(123), Milliseconds(123_001));
assert_ne!(Milliseconds(123_001), Seconds(123));
assert_ne!(Milliseconds(123_001_i64), Seconds(123_i64));
assert_ne!(Seconds(123_i64), Milliseconds(123_001_i64));
assert_ne!(Seconds(123_i64), Milliseconds(123_001_i32));

Comparisons

assert!(Seconds(2) < Seconds(3));
assert!(Seconds(2) < Milliseconds(2_001));
assert!(Seconds(2) == Milliseconds(2_000));
assert!(Seconds(2) > Milliseconds(1_999));
assert!(Seconds(2_i32) < Milliseconds(2_001_i64));
assert!(Seconds(2_i64) < Milliseconds(2_001_i32));

Implementations of the Duration trait.

Constructing a duration

assert_eq!(Milliseconds::<i32>::new(23), Milliseconds(23_i32));
assert_eq!(Milliseconds(23), 23.milliseconds());

Get the integer count

assert_eq!(Milliseconds(23).count(), 23);

Formatting

Just forwards the underlying integer to core::fmt::Display::fmt()

assert_eq!(format!("{}", Seconds(123)), "123");

Add/Sub

Panics

Panics if the rhs duration cannot be converted into the lhs duration type

In this example, the maximum i32 value of seconds is stored as i32 and converting that value to milliseconds (with i32 storage type) causes an overflow.

let _ = Milliseconds(24) + Seconds(i32::MAX);

This example works just fine as the seconds value is first cast to i64, then converted to milliseconds.

let _ = Milliseconds(24_i64) + Seconds(i32::MAX);

Here, there is no units conversion to worry about, but i32::MAX + 1 cannot be cast to an i32.

let _ = Seconds(i32::MAX) + Seconds(i32::MAX as i64 + 1);

Examples

assert_eq!((Milliseconds(3_234) - Seconds(2)), Milliseconds(1_234));
assert_eq!((Milliseconds(3_234_i64) - Seconds(2_i32)), Milliseconds(1_234_i64));

Equality

assert_eq!(Seconds(123), Seconds(123));
assert_eq!(Seconds(123), Milliseconds(123_000));
assert_ne!(Seconds(123), Milliseconds(123_001));
assert_ne!(Milliseconds(123_001), Seconds(123));
assert_ne!(Milliseconds(123_001_i64), Seconds(123_i64));
assert_ne!(Seconds(123_i64), Milliseconds(123_001_i64));
assert_ne!(Seconds(123_i64), Milliseconds(123_001_i32));

Comparisons

assert!(Seconds(2) < Seconds(3));
assert!(Seconds(2) < Milliseconds(2_001));
assert!(Seconds(2) == Milliseconds(2_000));
assert!(Seconds(2) > Milliseconds(1_999));
assert!(Seconds(2_i32) < Milliseconds(2_001_i64));
assert!(Seconds(2_i64) < Milliseconds(2_001_i32));

Structs

Hours

See module-level documentation for details about this type

Microseconds

See module-level documentation for details about this type

Milliseconds

See module-level documentation for details about this type

Minutes

See module-level documentation for details about this type

Nanoseconds

See module-level documentation for details about this type

Seconds

See module-level documentation for details about this type