1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
use chrono::{DateTime, Local, Utc};
// Clock
/// A trait for getting the current time.
///
/// **This is supported on `feature=clock` only.**
///
/// [Example](https://github.com/leroyguillaume/mockable/tree/main/examples/clock.rs).
pub trait Clock: Send + Sync {
/// Returns the current time in the local timezone.
fn local(&self) -> DateTime<Local>;
/// Returns the current time in UTC.
fn utc(&self) -> DateTime<Utc>;
}
// DefaultClock
/// Default implementation of [`Clock`](trait.Clock.html).
///
/// **This is supported on `feature=clock` only.**
///
/// [Example](https://github.com/leroyguillaume/mockable/tree/main/examples/clock.rs).
pub struct DefaultClock;
impl Clock for DefaultClock {
fn local(&self) -> DateTime<Local> {
Local::now()
}
fn utc(&self) -> DateTime<Utc> {
Utc::now()
}
}
// MockClock
#[cfg(feature = "mock")]
mockall::mock! {
/// `mockall` implementation of [`Clock`](trait.Clock.html).
///
/// **This is supported on `feature=clock,mock` only.**
///
/// [Example](https://github.com/leroyguillaume/mockable/tree/main/examples/clock.rs).
pub Clock {}
impl Clock for Clock {
fn local(&self) -> DateTime<Local>;
fn utc(&self) -> DateTime<Utc>;
}
}