use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Time {
pub sec: i32,
pub nanosec: u32,
}
impl Time {
pub fn as_nanos(&self) -> i64 {
(self.sec as i64) * 1_000_000_000 + (self.nanosec as i64)
}
#[cfg_attr(not(test), expect(dead_code))] pub fn as_secs(&self) -> i64 {
(self.sec as i64) + (self.nanosec as i64) / 1_000_000_000
}
#[cfg_attr(not(test), expect(dead_code))] pub fn as_secs_f64(&self) -> f64 {
self.sec as f64 + (self.nanosec as f64) / 1_000_000_000.0
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_as_nanos() {
let time = Time {
sec: 1,
nanosec: 700_000_000,
};
assert_eq!(time.as_nanos(), 1_700_000_000);
let time = Time {
sec: -2,
nanosec: 300_000_000,
};
assert_eq!(time.as_nanos(), -1_700_000_000);
}
#[test]
fn test_as_secs() {
let time = Time {
sec: 1,
nanosec: 700_000_000,
};
assert_eq!(time.as_secs(), 1);
assert_eq!(time.as_secs_f64(), 1.7);
let time = Time {
sec: -2,
nanosec: 300_000_000,
};
assert_eq!(time.as_secs(), -2);
assert_eq!(time.as_secs_f64(), -1.7);
}
}