use-event-timestamp 0.1.0

SystemTime timestamp wrapper for RustUse event primitives.
Documentation
#![forbid(unsafe_code)]
#![doc = include_str!("../README.md")]

use std::time::SystemTime;

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct EventTimestamp(SystemTime);

impl EventTimestamp {
    pub fn now() -> Self {
        Self(SystemTime::now())
    }

    pub fn from_system_time(value: SystemTime) -> Self {
        Self(value)
    }

    pub const fn as_system_time(&self) -> SystemTime {
        self.0
    }
}

impl Default for EventTimestamp {
    fn default() -> Self {
        Self::now()
    }
}

#[cfg(test)]
mod tests {
    use super::EventTimestamp;
    use std::time::{Duration, SystemTime};

    #[test]
    fn wraps_system_time() {
        let timestamp = EventTimestamp::from_system_time(SystemTime::UNIX_EPOCH);

        assert_eq!(timestamp.as_system_time(), SystemTime::UNIX_EPOCH);
    }

    #[test]
    fn creates_current_timestamp_by_default() {
        let timestamp = EventTimestamp::default();

        assert!(timestamp.as_system_time() >= SystemTime::UNIX_EPOCH);
    }

    #[test]
    fn preserves_precise_system_time() {
        let value = SystemTime::UNIX_EPOCH + Duration::from_secs(5);
        let timestamp = EventTimestamp::from_system_time(value);

        assert_eq!(timestamp.as_system_time(), value);
    }
}