random_output/
time.rs

1use chrono::{DateTime, Local};
2
3#[cfg(not(test))]
4pub fn now() -> DateTime<Local> {
5    chrono::Local::now()
6}
7
8#[cfg(test)]
9pub use mock_time::now;
10
11#[cfg(test)]
12pub mod mock_time {
13    use super::*;
14    use std::cell::RefCell;
15
16    thread_local! {
17        static MOCK_TIME: RefCell<Option<DateTime<Local>>> = const {RefCell::new(None)};
18    }
19
20    pub fn now() -> DateTime<Local> {
21        MOCK_TIME.with(|cell| {
22            cell.borrow()
23                .as_ref()
24                .cloned()
25                .unwrap_or_else(chrono::Local::now)
26        })
27    }
28
29    pub fn set_mock_time(time: DateTime<Local>) {
30        MOCK_TIME.with(|cell| *cell.borrow_mut() = Some(time));
31    }
32}