ia_sandbox/
utils.rs

1use std::fmt::{self, Display, Formatter};
2use std::time::Duration;
3
4#[derive(Clone, Copy, Debug)]
5pub struct DurationDisplay(pub Duration);
6
7impl Display for DurationDisplay {
8    fn fmt(&self, formatter: &mut Formatter<'_>) -> fmt::Result {
9        let nanos = self.0.as_secs() * 1_000_000_000u64 + u64::from(self.0.subsec_nanos());
10        if nanos < 1000 {
11            write!(formatter, "{}ns", nanos)
12        } else if nanos < 10_000_000 {
13            write!(formatter, "{:.3}us", (nanos as f64) / 1_000.)
14        } else if nanos < 1_000_000_000 {
15            write!(formatter, "{:.3}ms", (nanos as f64) / 1_000_000.)
16        } else {
17            write!(formatter, "{:.3}s", (nanos as f64) / 1_000_000_000.)
18        }
19    }
20}
21
22pub trait DurationExt {
23    fn as_milliseconds(&self) -> u128;
24}
25
26impl DurationExt for Duration {
27    fn as_milliseconds(&self) -> u128 {
28        u128::from(self.as_secs()) * 1000 + u128::from(self.subsec_nanos()) / 1_000_000
29    }
30}