use std::fmt;
use windows_sys::Win32::Foundation::FILETIME;
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct WindowsFileTimestamp(i64);
impl WindowsFileTimestamp {
pub const ZERO: Self = Self(0);
#[must_use]
pub const fn from_ticks(ticks: i64) -> Self {
Self(ticks)
}
#[must_use]
pub const fn ticks(self) -> i64 {
self.0
}
#[must_use]
pub const fn from_filetime(time: FILETIME) -> Self {
let ticks = ((time.dwHighDateTime as u64) << 32) | (time.dwLowDateTime as u64);
Self(ticks as i64)
}
#[must_use]
pub const fn to_filetime(self) -> FILETIME {
let ticks = self.0 as u64;
FILETIME {
dwLowDateTime: ticks as u32,
dwHighDateTime: (ticks >> 32) as u32,
}
}
}
impl fmt::Display for WindowsFileTimestamp {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{} ticks", self.0)
}
}
impl From<i64> for WindowsFileTimestamp {
fn from(ticks: i64) -> Self {
Self(ticks)
}
}
impl From<WindowsFileTimestamp> for i64 {
fn from(timestamp: WindowsFileTimestamp) -> Self {
timestamp.0
}
}
#[cfg(test)]
mod tests;