// SPDX-FileCopyrightText: 2022-Present Nils Andreas Svee mailto:contact@lochnair.net (github @Lochnair) // // SPDX-License-Identifier: MPL-2.0 use rustix::fs::Timespec; use rustix::time::{ClockId, clock_gettime}; pub struct Time { time_s: u64, time_ns: u64, } impl Time { pub fn new(id: ClockId) -> Self { let time: Timespec = clock_gettime(id); Self { time_s: time.tv_sec as u64, time_ns: time.tv_nsec as u64, } } pub fn get_time_since_midnight(&self) -> i64 { (self.time_s as i64 % 86400 * 1000) + (self.time_ns as i64 / 1000000) } pub fn secs(&self) -> u64 { self.time_s } pub fn nsecs(&self) -> u64 { self.time_ns } pub fn as_nanos(&self) -> u64 { self.time_s * 1_000_000_000 + self.time_ns } pub fn as_secs_f64(&self) -> f64 { self.time_s as f64 + self.time_ns as f64 / 1_000_000_000.0 } pub fn to_milliseconds(&self) -> u64 { (self.time_s * 1000) + (self.time_ns / 1000000) } }