#[repr(transparent)]pub struct MicroSeconds(pub u64);
Expand description
Microseconds. Represents a span of time like std::time::Duration
.
This is an unsigned 64-bit type, and thus represents absolute values only.
Tuple Fields§
§0: u64
Implementations§
Source§impl MicroSeconds
impl MicroSeconds
Sourcepub const INVALID: Self
pub const INVALID: Self
MicroSeconds
value representing an ‘invalid’ time.
§Examples
assert_eq!(MicroSeconds::INVALID, MicroSeconds(std::u64::MAX));
Sourcepub const MILLISECOND: Self
pub const MILLISECOND: Self
One millisecond in microseconds.
§Examples
assert_eq!(MicroSeconds::MILLISECOND, MicroSeconds(1_000));
Sourcepub const MAX: Self
pub const MAX: Self
Largest valid time value (largest integer value is reserved for representing ‘invalid’).
Roughly equal to 5,124,095,576 hours, 213,503,982 days, or 584,542 years.
§Examples
assert_eq!(MicroSeconds::MAX, MicroSeconds(std::u64::MAX - 1));
Sourcepub const fn is_valid(&self) -> bool
pub const fn is_valid(&self) -> bool
Returns true
so long as inner value is not Self::INVALID
.
§Examples
assert_eq!(MicroSeconds::MIN.is_valid(), true);
assert_eq!(MicroSeconds::MAX.is_valid(), true);
assert_eq!(MicroSeconds::INVALID.is_valid(), false);
assert_eq!(MicroSeconds::ZERO.is_valid(), true);
assert_eq!(MicroSeconds(60 * MICROS_PER_SEC).is_valid(), true);
Sourcepub const fn is_zero(&self) -> bool
pub const fn is_zero(&self) -> bool
Returns true
so long as inner value is zero.
§Examples
assert_eq!(MicroSeconds::ZERO.is_zero(), true);
assert_eq!(MicroSeconds(0).is_zero(), true);
assert_eq!(MicroSeconds(1).is_zero(), false);
Sourcepub fn from_secs(secs: u64) -> Option<Self>
pub fn from_secs(secs: u64) -> Option<Self>
Creates a new MicroSeconds
from the specified number of whole seconds. Returns None
on
overflow.
§Examples
assert_eq!(MicroSeconds::from_secs(2), Some(MicroSeconds(2_000_000)));
assert_eq!(MicroSeconds::from_secs(0xffff_ffff_0000_0000), None);
Sourcepub fn from_millis(millis: u64) -> Option<Self>
pub fn from_millis(millis: u64) -> Option<Self>
Creates a new MicroSeconds
from the specified number of whole milliseconds. Returns None
on overflow.
§Examples
assert_eq!(MicroSeconds::from_millis(23), Some(MicroSeconds(23_000)));
assert_eq!(MicroSeconds::from_millis(0xffff_ffff_0000_0000), None);
Sourcepub fn diff(self, other: Self) -> Self
pub fn diff(self, other: Self) -> Self
Returns the absolute difference with other
.
§Examples
assert_eq!(MicroSeconds(0).diff(MicroSeconds(0)), MicroSeconds(0));
assert_eq!(MicroSeconds(100).diff(MicroSeconds(100)), MicroSeconds(0));
assert_eq!(MicroSeconds(200).diff(MicroSeconds(150)), MicroSeconds(50));
assert_eq!(MicroSeconds(150).diff(MicroSeconds(200)), MicroSeconds(50));
Sourcepub const fn as_secs(&self) -> u64
pub const fn as_secs(&self) -> u64
Returns the total number of whole seconds.
§Examples
assert_eq!(MicroSeconds(2_300_000).as_secs(), 2);
assert_eq!(MicroSeconds(2_800_000).as_secs(), 2);
Sourcepub const fn as_millis(&self) -> u64
pub const fn as_millis(&self) -> u64
Returns the total number of whole milliseconds.
§Examples
assert_eq!(MicroSeconds(23_000_300).as_millis(), 23_000);
assert_eq!(MicroSeconds(23_000_800).as_millis(), 23_000);
Sourcepub fn from_secs_f64(secs: f64) -> Self
pub fn from_secs_f64(secs: f64) -> Self
Creates a new MicroSeconds
from the specified number of seconds represented as f64
.
Panics if secs
is not finite, is negative, or the value overflows.
§Examples
assert_eq!(MicroSeconds::from_secs_f64(0.5), MicroSeconds(500_000));
assert_eq!(MicroSeconds::from_secs_f64(2.3), MicroSeconds(2_300_000));
These should panic.
MicroSeconds::from_secs_f64(std::f64::INFINITY);
MicroSeconds::from_secs_f64(-0.5);
MicroSeconds::from_secs_f64(std::f64::MAX);
MicroSeconds::from_secs_f64(std::f64::NAN);
Sourcepub fn from_secs_f32(secs: f32) -> Self
pub fn from_secs_f32(secs: f32) -> Self
Creates a new MicroSeconds
from the specified number of seconds represented as f32
.
Panics if secs
is not finite, is negative, or the value overflows.
§Examples
assert_eq!(MicroSeconds::from_secs_f32(0.5), MicroSeconds(500_000));
assert_eq!(MicroSeconds::from_secs_f32(2.3), MicroSeconds(2_299_999));
These should panic.
MicroSeconds::from_secs_f32(std::f32::INFINITY);
MicroSeconds::from_secs_f32(-0.5);
MicroSeconds::from_secs_f32(std::f32::MAX);
MicroSeconds::from_secs_f32(std::f32::NAN);
Sourcepub fn as_secs_f64(&self) -> f64
pub fn as_secs_f64(&self) -> f64
Returns the number of seconds as f64
.
§Examples
assert_eq!(MicroSeconds(2_300_000).as_secs_f64(), 2.3);
assert_eq!(MicroSeconds(500_000).as_secs_f64(), 0.5);
Sourcepub fn as_secs_f32(&self) -> f32
pub fn as_secs_f32(&self) -> f32
Returns the number of seconds as f32
.
§Examples
assert_eq!(MicroSeconds(2_300_000).as_secs_f32(), 2.3);
assert_eq!(MicroSeconds(500_000).as_secs_f32(), 0.5);
Sourcepub fn checked_add(self, other: Self) -> Option<Self>
pub fn checked_add(self, other: Self) -> Option<Self>
Checked integer addition. Computes self + rhs
, returning None
if overflow occurred,
using the inner integer’s checked_add()
method.
§Examples
let quater_minute = MicroSeconds(15 * MICROS_PER_SEC);
let half_minute = MicroSeconds(30 * MICROS_PER_SEC);
let three_quater_minute = MicroSeconds(45 * MICROS_PER_SEC);
assert_eq!(half_minute.checked_add(quater_minute), Some(three_quater_minute));
assert_eq!(MicroSeconds::MAX.checked_add(half_minute), None);
Sourcepub fn checked_add_duration(self, rhs: Duration) -> Option<Self>
pub fn checked_add_duration(self, rhs: Duration) -> Option<Self>
Checked integer addition. Computes self + rhs
, returning None
if overflow occurred,
using the inner integer’s checked_add()
method.
§Examples
let half_minute = MicroSeconds(30 * MICROS_PER_SEC);
let duration1 = Duration::new(2, 5 * NANOS_PER_MICRO + 20); // 2s + 5us + 20ns
let duration2 = Duration::new(MicroSeconds::MAX.inner() / MICROS_PER_SEC, 0);
assert_eq!(half_minute.checked_add_duration(duration1), Some(MicroSeconds(32_000_005)));
assert_eq!(half_minute.checked_add_duration(duration2), None);
Sourcepub fn checked_sub(self, other: Self) -> Option<Self>
pub fn checked_sub(self, other: Self) -> Option<Self>
Checked integer subtraction. Computes self - rhs
, returning None
if overflow occurred,
using the inner integer’s checked_sub()
method.
§Examples
let quater_minute = MicroSeconds(15 * MICROS_PER_SEC);
let three_quater_minute = MicroSeconds(45 * MICROS_PER_SEC);
let whole_minute = MicroSeconds(60 * MICROS_PER_SEC);
assert_eq!(whole_minute.checked_sub(quater_minute), Some(three_quater_minute));
assert_eq!(quater_minute.checked_sub(whole_minute), None);
Sourcepub fn checked_sub_duration(self, rhs: Duration) -> Option<Self>
pub fn checked_sub_duration(self, rhs: Duration) -> Option<Self>
Checked integer subtraction. Computes self - rhs
, returning None
if overflow occurred,
using the inner integer’s checked_sub()
method.
§Examples
let half_minute = MicroSeconds(30 * MICROS_PER_SEC);
let duration1 = Duration::new(2, 5 * NANOS_PER_MICRO + 20); // 2s + 5us + 20ns
let duration2 = Duration::new(45, 0);
assert_eq!(half_minute.checked_sub_duration(duration1), Some(MicroSeconds(27_999_995)));
assert_eq!(half_minute.checked_sub_duration(duration2), None);
Sourcepub fn checked_mul(self, rhs: u32) -> Option<Self>
pub fn checked_mul(self, rhs: u32) -> Option<Self>
Checked integer multiplication. Computes self * rhs
, returning None
if overflow
occurred, using the inner integer’s checked_mul()
method.
§Examples
let quater_minute = MicroSeconds(15 * MICROS_PER_SEC);
let whole_minute = MicroSeconds(60 * MICROS_PER_SEC);
assert_eq!(quater_minute.checked_mul(4), Some(whole_minute));
assert_eq!(MicroSeconds::MAX.checked_mul(2), None);
Sourcepub fn checked_div(self, rhs: u32) -> Option<Self>
pub fn checked_div(self, rhs: u32) -> Option<Self>
Checked integer division. Computes self / rhs
, returning None
if rhs == 0
, using the
inner integer’s checked_div()
method.
§Examples
let quater_minute = MicroSeconds(15 * MICROS_PER_SEC);
let whole_minute = MicroSeconds(60 * MICROS_PER_SEC);
assert_eq!(whole_minute.checked_div(4), Some(quater_minute));
assert_eq!(whole_minute.checked_div(0), None);
Sourcepub fn checked_rem(self, rhs: u32) -> Option<Self>
pub fn checked_rem(self, rhs: u32) -> Option<Self>
Checked integer remainder. Computes self % rhs
, returning None
if rhs == 0
, using the
inner integer’s checked_rem()
method.
§Examples
let quater_minute = MicroSeconds(15 * MICROS_PER_SEC);
let whole_minute = MicroSeconds(60 * MICROS_PER_SEC);
assert_eq!(whole_minute.checked_rem(4), Some(MicroSeconds::ZERO));
assert_eq!(whole_minute.checked_rem(7), Some(MicroSeconds(4)));
assert_eq!(whole_minute.checked_rem(0), None);
Sourcepub fn mul_f64(self, rhs: f64) -> Self
pub fn mul_f64(self, rhs: f64) -> Self
Multiplies MicroSeconds
by f64
.
Converts to an f64
representing seconds, multiplies by the given factor, then converts
back to microseconds.
Panics if rhs
is not finite, is negative, or the value overflows.
§Examples
let micros = MicroSeconds(2_700_000_000);
assert_eq!(micros.mul_f64(3.14), MicroSeconds(8_478_000_000));
assert_eq!(micros.mul_f64(3.14e5), MicroSeconds(847_800_000_000_000));
These should panic.
MicroSeconds::SECOND.mul_f64(std::f64::INFINITY);
MicroSeconds::SECOND.mul_f64(-0.5);
MicroSeconds(2 * MICROS_PER_SEC).mul_f64(std::f64::MAX / 10.0);
MicroSeconds::SECOND.mul_f64(std::f64::NAN);
Sourcepub fn mul_f32(self, rhs: f32) -> Self
pub fn mul_f32(self, rhs: f32) -> Self
Multiplies MicroSeconds
by f32
.
Converts to an f32
representing seconds, multiplies by the given factor, then converts
back to microseconds.
Panics if rhs
is not finite, is negative, or the value overflows.
§Examples
let micros = MicroSeconds(2_700_000_000);
// Note the rounding errors that are clear here.
assert_eq!(micros.mul_f32(3.14), MicroSeconds(8_478_000_000));
assert_eq!(micros.mul_f32(3.14e5), MicroSeconds(847_800_000_000_000));
These should panic.
MicroSeconds::SECOND.mul_f32(std::f32::INFINITY);
MicroSeconds::SECOND.mul_f32(-0.5);
MicroSeconds(2 * MICROS_PER_SEC).mul_f32(std::f32::MAX / 10.0);
MicroSeconds::SECOND.mul_f32(std::f32::NAN);
Sourcepub fn div_f64(self, rhs: f64) -> Self
pub fn div_f64(self, rhs: f64) -> Self
Divides MicroSeconds
by f64
.
Converts to an f64
representing seconds, divides by the given factor, then converts back
to microseconds.
Panics if rhs
is not finite, is negative, or the value overflows.
§Examples
let micros = MicroSeconds(2_700_000_000);
assert_eq!(micros.div_f64(3.14), MicroSeconds(859_872_611));
assert_eq!(micros.div_f64(3.14e5), MicroSeconds(8_598));
These should panic.
MicroSeconds::SECOND.div_f64(-2.0);
MicroSeconds::MAX.div_f64(0.5);
MicroSeconds::SECOND.div_f64(std::f64::NAN);
Sourcepub fn div_f32(self, rhs: f32) -> Self
pub fn div_f32(self, rhs: f32) -> Self
Divides MicroSeconds
by f32
.
Converts to an f32
representing seconds, divides by the given factor, then converts back
to microseconds.
Panics if rhs
is not finite, is negative, or the value overflows.
§Examples
let micros = MicroSeconds(2_700_000_000);
assert_eq!(micros.div_f32(3.14), MicroSeconds(859_872_558));
assert_eq!(micros.div_f32(3.14e5), MicroSeconds(8_598));
These should panic.
MicroSeconds::SECOND.div_f32(-2.0);
MicroSeconds::MAX.div_f32(0.5);
MicroSeconds::SECOND.div_f32(std::f32::NAN);
Trait Implementations§
Source§impl Add<Duration> for MicroSeconds
impl Add<Duration> for MicroSeconds
Source§impl Add<MicroSeconds> for Duration
impl Add<MicroSeconds> for Duration
Source§impl Add<MicroSeconds> for MonotonicTs
impl Add<MicroSeconds> for MonotonicTs
Source§type Output = MonotonicTs
type Output = MonotonicTs
+
operator.Source§fn add(self, rhs: MicroSeconds) -> Self
fn add(self, rhs: MicroSeconds) -> Self
+
operation. Read moreSource§impl Add<MicroSeconds> for Timeval
impl Add<MicroSeconds> for Timeval
Source§impl Add<MicroSeconds> for UnixTs
impl Add<MicroSeconds> for UnixTs
Source§impl Add for MicroSeconds
impl Add for MicroSeconds
Source§impl AddAssign<Duration> for MicroSeconds
impl AddAssign<Duration> for MicroSeconds
Source§fn add_assign(&mut self, rhs: Duration)
fn add_assign(&mut self, rhs: Duration)
+=
operation. Read moreSource§impl AddAssign<MicroSeconds> for Duration
impl AddAssign<MicroSeconds> for Duration
Source§fn add_assign(&mut self, rhs: MicroSeconds)
fn add_assign(&mut self, rhs: MicroSeconds)
+=
operation. Read moreSource§impl AddAssign<MicroSeconds> for MonotonicTs
impl AddAssign<MicroSeconds> for MonotonicTs
Source§fn add_assign(&mut self, rhs: MicroSeconds)
fn add_assign(&mut self, rhs: MicroSeconds)
+=
operation. Read moreSource§impl AddAssign<MicroSeconds> for Timeval
impl AddAssign<MicroSeconds> for Timeval
Source§fn add_assign(&mut self, rhs: MicroSeconds)
fn add_assign(&mut self, rhs: MicroSeconds)
+=
operation. Read moreSource§impl AddAssign<MicroSeconds> for UnixTs
impl AddAssign<MicroSeconds> for UnixTs
Source§fn add_assign(&mut self, rhs: MicroSeconds)
fn add_assign(&mut self, rhs: MicroSeconds)
+=
operation. Read moreSource§impl AddAssign for MicroSeconds
impl AddAssign for MicroSeconds
Source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
+=
operation. Read moreSource§impl Clone for MicroSeconds
impl Clone for MicroSeconds
Source§fn clone(&self) -> MicroSeconds
fn clone(&self) -> MicroSeconds
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for MicroSeconds
impl Debug for MicroSeconds
Source§impl Default for MicroSeconds
impl Default for MicroSeconds
Source§fn default() -> MicroSeconds
fn default() -> MicroSeconds
Source§impl Display for MicroSeconds
impl Display for MicroSeconds
Source§impl Div<u32> for MicroSeconds
impl Div<u32> for MicroSeconds
Source§impl DivAssign<u32> for MicroSeconds
impl DivAssign<u32> for MicroSeconds
Source§fn div_assign(&mut self, rhs: u32)
fn div_assign(&mut self, rhs: u32)
/=
operation. Read moreSource§impl From<MicroSeconds> for Duration
impl From<MicroSeconds> for Duration
Source§fn from(t: MicroSeconds) -> Self
fn from(t: MicroSeconds) -> Self
Source§impl From<MicroSeconds> for Timeval
impl From<MicroSeconds> for Timeval
Source§fn from(t: MicroSeconds) -> Self
fn from(t: MicroSeconds) -> Self
Source§impl From<Timeval> for MicroSeconds
impl From<Timeval> for MicroSeconds
Source§impl Mul<MicroSeconds> for u32
impl Mul<MicroSeconds> for u32
Source§type Output = MicroSeconds
type Output = MicroSeconds
*
operator.Source§fn mul(self, rhs: MicroSeconds) -> MicroSeconds
fn mul(self, rhs: MicroSeconds) -> MicroSeconds
*
operation. Read moreSource§impl Mul<u32> for MicroSeconds
impl Mul<u32> for MicroSeconds
Source§impl MulAssign<u32> for MicroSeconds
impl MulAssign<u32> for MicroSeconds
Source§fn mul_assign(&mut self, rhs: u32)
fn mul_assign(&mut self, rhs: u32)
*=
operation. Read moreSource§impl Ord for MicroSeconds
impl Ord for MicroSeconds
Source§fn cmp(&self, other: &MicroSeconds) -> Ordering
fn cmp(&self, other: &MicroSeconds) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for MicroSeconds
impl PartialEq for MicroSeconds
Source§impl PartialOrd for MicroSeconds
impl PartialOrd for MicroSeconds
Source§impl Rem<u32> for MicroSeconds
impl Rem<u32> for MicroSeconds
Source§impl RemAssign<u32> for MicroSeconds
impl RemAssign<u32> for MicroSeconds
Source§fn rem_assign(&mut self, rhs: u32)
fn rem_assign(&mut self, rhs: u32)
%=
operation. Read moreSource§impl Sub<Duration> for MicroSeconds
impl Sub<Duration> for MicroSeconds
Source§impl Sub<MicroSeconds> for Duration
impl Sub<MicroSeconds> for Duration
Source§impl Sub<MicroSeconds> for MonotonicTs
impl Sub<MicroSeconds> for MonotonicTs
Source§type Output = MonotonicTs
type Output = MonotonicTs
-
operator.Source§fn sub(self, rhs: MicroSeconds) -> Self
fn sub(self, rhs: MicroSeconds) -> Self
-
operation. Read moreSource§impl Sub<MicroSeconds> for Timeval
impl Sub<MicroSeconds> for Timeval
Source§impl Sub<MicroSeconds> for UnixTs
impl Sub<MicroSeconds> for UnixTs
Source§impl Sub for MicroSeconds
impl Sub for MicroSeconds
Source§impl SubAssign<Duration> for MicroSeconds
impl SubAssign<Duration> for MicroSeconds
Source§fn sub_assign(&mut self, rhs: Duration)
fn sub_assign(&mut self, rhs: Duration)
-=
operation. Read moreSource§impl SubAssign<MicroSeconds> for Duration
impl SubAssign<MicroSeconds> for Duration
Source§fn sub_assign(&mut self, rhs: MicroSeconds)
fn sub_assign(&mut self, rhs: MicroSeconds)
-=
operation. Read moreSource§impl SubAssign<MicroSeconds> for MonotonicTs
impl SubAssign<MicroSeconds> for MonotonicTs
Source§fn sub_assign(&mut self, rhs: MicroSeconds)
fn sub_assign(&mut self, rhs: MicroSeconds)
-=
operation. Read moreSource§impl SubAssign<MicroSeconds> for Timeval
impl SubAssign<MicroSeconds> for Timeval
Source§fn sub_assign(&mut self, rhs: MicroSeconds)
fn sub_assign(&mut self, rhs: MicroSeconds)
-=
operation. Read moreSource§impl SubAssign<MicroSeconds> for UnixTs
impl SubAssign<MicroSeconds> for UnixTs
Source§fn sub_assign(&mut self, rhs: MicroSeconds)
fn sub_assign(&mut self, rhs: MicroSeconds)
-=
operation. Read moreSource§impl SubAssign for MicroSeconds
impl SubAssign for MicroSeconds
Source§fn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
-=
operation. Read more