use chrono::{DateTime, FixedOffset, Local};
use std::cell::RefCell;
thread_local! {
static FIXED_TIME: RefCell<Option<DateTime<FixedOffset>>> = const { RefCell::new(None) };
}
pub(crate) fn current_datetime() -> DateTime<FixedOffset> {
FIXED_TIME.with(|time_cell| {
if let Some(datetime) = *time_cell.borrow() {
#[cfg(test)]
println!("current_datetime {}", datetime);
datetime
} else {
#[cfg(test)]
println!("current_datetime Local::now()");
Local::now().fixed_offset()
}
})
}
#[cfg(test)]
pub fn current_datetime_set(time: DateTime<FixedOffset>) {
FIXED_TIME.with(|time_cell| {
*time_cell.borrow_mut() = Some(time);
});
}
#[cfg(test)]
pub fn current_datetime_reset() {
FIXED_TIME.with(|time_cell| {
*time_cell.borrow_mut() = None;
});
}