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

Common 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));

Structs

Hours
Microseconds
Milliseconds
Minutes
Nanoseconds
Seconds