atm0s_media_server_utils/
timer.rs1use std::sync::atomic::{AtomicU64, Ordering};
2use std::sync::Arc;
3use std::time::{SystemTime, UNIX_EPOCH};
4
5pub trait Timer: Send + Sync {
6 fn now_ms(&self) -> u64;
7}
8
9#[derive(Clone)]
10pub struct SystemTimer();
11
12impl Timer for SystemTimer {
13 fn now_ms(&self) -> u64 {
14 let start = SystemTime::now();
15 start.duration_since(UNIX_EPOCH).expect("Time went backwards").as_millis() as u64
16 }
17}
18
19#[derive(Clone, Default)]
20pub struct MockTimer {
21 current_value: Arc<AtomicU64>,
22}
23
24impl Timer for MockTimer {
25 fn now_ms(&self) -> u64 {
26 self.current_value.load(Ordering::Relaxed)
27 }
28}
29
30impl MockTimer {
31 pub fn fake(&self, value: u64) {
32 self.current_value.store(value, Ordering::Relaxed);
33 }
34}