#![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);
}
}