cargo_checkmate/
duration.rs1use humantime::{format_duration, FormattedDuration};
2use std::time::Instant;
3
4pub(crate) struct DurationTracker(Instant);
5
6impl DurationTracker {
7 pub(crate) fn start() -> Self {
8 DurationTracker(Instant::now())
9 }
10
11 pub(crate) fn finish(self) -> Duration {
12 let raw_duration = Instant::now().duration_since(self.0);
13 let ms = u64::try_from(raw_duration.as_millis()).unwrap();
14 Duration(std::time::Duration::from_millis(ms))
15 }
16}
17
18pub(crate) struct Duration(std::time::Duration);
19
20impl Duration {
21 pub(crate) fn format_human(self) -> FormattedDuration {
22 format_duration(self.0)
23 }
24
25 pub(crate) fn format_seconds(self) -> String {
26 let s = self.into_ms_f64();
27 format!("{s:>7.3} seconds")
28 }
29
30 fn into_ms_f64(self) -> f64 {
31 u32::try_from(self.0.as_millis())
33 .map(|ms| f64::from(ms) / 1000f64)
34 .unwrap_or(f64::INFINITY)
35 }
36}