use std::time::{SystemTime, SystemTimeError};
#[derive(Debug, Clone, PartialEq, Eq, Hash, Copy)]
pub struct Timetoken {
pub t: u64,
pub r: u32,
}
impl Timetoken {
pub fn new(time: SystemTime, region: u32) -> Result<Self, SystemTimeError> {
let time = time.duration_since(SystemTime::UNIX_EPOCH)?;
let secs = time.as_secs();
let nanos = time.subsec_nanos();
let t = (secs * 10_000_000) | (u64::from(nanos) / 100);
Ok(Self { t, r: region })
}
}
impl Default for Timetoken {
#[must_use]
fn default() -> Self {
Self {
t: u64::default(),
r: u32::default(),
}
}
}
impl std::fmt::Display for Timetoken {
fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(fmt, "{{ t: {}, r: {} }}", self.t, self.r)
}
}