Skip to main content

bma_ts/
common.rs

1use crate::{Monotonic, Timestamp};
2use core::fmt;
3use std::time::Duration;
4
5macro_rules! impl_common {
6    ($t: ty) => {
7        impl $t {
8            #[inline]
9            pub fn abs_diff(self, other: $t) -> Duration {
10                if self.0 > other.0 {
11                    self.0 - other.0
12                } else {
13                    other.0 - self.0
14                }
15            }
16            #[inline]
17            pub fn as_secs(self) -> u64 {
18                self.0.as_secs()
19            }
20            #[inline]
21            pub fn from_secs(value: u64) -> Self {
22                Self(Duration::from_secs(value))
23            }
24            #[inline]
25            pub fn as_secs_f64(self) -> f64 {
26                self.0.as_secs_f64()
27            }
28            #[inline]
29            pub fn from_secs_f64(value: f64) -> Self {
30                Self(Duration::from_secs_f64(value))
31            }
32            #[inline]
33            pub fn as_secs_f32(self) -> f32 {
34                self.0.as_secs_f32()
35            }
36            #[inline]
37            pub fn from_secs_f32(value: f32) -> Self {
38                Self(Duration::from_secs_f32(value))
39            }
40            #[inline]
41            pub fn as_micros(self) -> u128 {
42                self.0.as_micros()
43            }
44            #[inline]
45            pub fn from_micros(value: u64) -> Self {
46                Self(Duration::from_micros(value))
47            }
48            #[inline]
49            pub fn as_millis(self) -> u128 {
50                self.0.as_millis()
51            }
52            #[inline]
53            pub fn from_millis(value: u64) -> Self {
54                Self(Duration::from_millis(value))
55            }
56            #[inline]
57            pub fn as_nanos(self) -> u128 {
58                self.0.as_nanos()
59            }
60            #[inline]
61            pub fn from_nanos(value: u64) -> Self {
62                Self(Duration::from_nanos(value))
63            }
64            #[inline]
65            pub fn as_duration(self) -> Duration {
66                self.into()
67            }
68        }
69        impl fmt::Display for $t {
70            fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
71                write!(f, "{}", self.0.as_nanos())
72            }
73        }
74    };
75}
76
77impl_common!(Timestamp);
78impl_common!(Monotonic);