#[cfg(not(turnloop_backend = "web"))]
pub use std::time::Instant;
#[cfg(turnloop_backend = "web")]
mod web {
use std::{
ops::{Add, Sub},
time::Duration,
};
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct Instant(Duration);
impl Instant {
pub const fn from_duration(ticks: Duration) -> Self {
Self(ticks)
}
pub const fn as_duration(self) -> Duration {
self.0
}
pub fn checked_add(self, duration: Duration) -> Option<Self> {
self.0.checked_add(duration).map(Self)
}
pub fn checked_sub(self, duration: Duration) -> Option<Self> {
self.0.checked_sub(duration).map(Self)
}
pub fn saturating_duration_since(self, earlier: Self) -> Duration {
self.0.saturating_sub(earlier.0)
}
pub fn duration_since(self, earlier: Self) -> Duration {
self.saturating_duration_since(earlier)
}
}
impl Add<Duration> for Instant {
type Output = Self;
fn add(self, duration: Duration) -> Self {
self.checked_add(duration).expect("instant overflow")
}
}
impl Sub<Duration> for Instant {
type Output = Self;
fn sub(self, duration: Duration) -> Self {
self.checked_sub(duration).expect("instant underflow")
}
}
impl Sub for Instant {
type Output = Duration;
fn sub(self, earlier: Self) -> Duration {
self.saturating_duration_since(earlier)
}
}
}
#[cfg(turnloop_backend = "web")]
pub use web::Instant;