#[derive(Debug)]
#[non_exhaustive]
pub enum TimeConfig {
None,
Unix,
Relative(std::time::Instant),
Timing(std::sync::Mutex<Option<std::time::Instant>>),
#[cfg(feature = "time")]
DateTime(&'static [time::format_description::FormatItem<'static>]),
}
impl Clone for TimeConfig {
fn clone(&self) -> Self {
match self {
Self::None => Self::None,
Self::Unix => Self::Unix,
Self::Relative(inner) => Self::Relative(*inner),
Self::Timing(_) => Self::Timing(Default::default()),
#[cfg(feature = "time")]
Self::DateTime(inner) => Self::DateTime(inner.clone()),
}
}
}
impl TimeConfig {
pub fn relative_now() -> Self {
Self::Relative(std::time::Instant::now())
}
pub fn relative_local() -> Self {
Self::Timing(Default::default())
}
pub fn unix_timestamp() -> Self {
Self::Unix
}
#[cfg(feature = "time")]
pub fn date_time_format(
format_description: &'static [time::format_description::FormatItem<'static>],
) -> Self {
Self::DateTime(format_description)
}
}
impl Default for TimeConfig {
fn default() -> Self {
Self::None
}
}