atm0s_media_server_utils/
timer.rs

1use 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}