use once_cell::sync::Lazy; use std::time::{Duration, SystemTime, SystemTimeError}; pub static NOW: Lazy = Lazy::new(SystemTime::now); #[derive(PartialOrd, PartialEq, Ord, Eq)] pub struct SystemTimeStub(SystemTime); impl SystemTimeStub { pub fn now() -> Self { Self(*NOW) } pub fn checked_add(&self, duration: Duration) -> Option { self.0.checked_add(duration).map(|t| t.into()) } pub fn duration_since(&self, earlier: SystemTime) -> Result { self.0.duration_since(earlier) } } impl From for SystemTimeStub { fn from(time: SystemTime) -> Self { Self(time) } }