use std::time::SystemTime;
pub trait Clock {
fn now(&self) -> SystemTime;
}
pub struct OsClock;
impl Clock for OsClock {
fn now(&self) -> SystemTime {
SystemTime::now()
}
}
pub struct FakeClock(pub SystemTime);
impl Clock for FakeClock {
fn now(&self) -> SystemTime {
self.0
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn fake_clock_returns_fixed_value() {
let fixed = SystemTime::UNIX_EPOCH
.checked_add(std::time::Duration::from_secs(1_000_000))
.unwrap();
let clock = FakeClock(fixed);
assert_eq!(clock.now(), fixed);
assert_eq!(clock.now(), fixed);
}
}