use core::ops::Add;
use core::time::Duration;
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
pub struct MonotonicInstant(u64);
impl MonotonicInstant {
#[must_use]
pub fn from_millis(milliseconds: u64) -> Self {
Self(milliseconds)
}
#[must_use]
pub fn as_millis(self) -> u64 {
self.0
}
#[must_use]
pub fn duration_since(self, earlier: Self) -> Duration {
Duration::from_millis(self.0.saturating_sub(earlier.0))
}
#[must_use]
pub fn saturating_add(self, duration: Duration) -> Self {
let milliseconds = u64::try_from(duration.as_millis()).unwrap_or(u64::MAX);
Self(self.0.saturating_add(milliseconds))
}
}
impl Add<Duration> for MonotonicInstant {
type Output = Self;
fn add(self, rhs: Duration) -> Self {
self.saturating_add(rhs)
}
}