use std::time::Duration;
pub const TIME_UNITS: [(&str, f64); 6] = [
("ns", 1.0),
("μs", 1e3),
("ms", 1e3),
("s", 1e3),
("min", 60.0),
("h", 60.0),
];
pub fn format_duration(duration: Duration, round: Option<u8>) -> String {
let sec = duration.as_secs_f64();
let min = sec / 60.0;
let h = min / 60.0;
let precision = round.unwrap_or(2).min(10) as usize;
if h > 0.0 {
return format!("{:.precision$}h", h);
} else if min > 0.0 {
return format!("{:.precision$}min", min);
} else if sec > 0.0 {
return format!("{:.precision$}s", sec);
}
let ms = duration.as_millis();
let μs = duration.as_micros();
let ns = duration.as_nanos();
if ms > 0 {
return format!("{:.precision$}ms", ms);
} else if μs > 0 {
return format!("{:.precision$}μs", μs);
} else if ns > 0 {
return format!("{:.precision$}ns", ns);
}
"0ns".to_string()
}
pub fn format_better_duration(duration: Duration) -> String {
let sec = duration.as_secs();
let min = sec / 60;
let h = min / 60;
if h > 0 {
return format!("{:02}h {:02}m {:02}s", h, min, sec);
} else if min > 0 {
return format!("{:02}m {:02}s", min, sec);
}
let ms = duration.subsec_millis();
format!("{:02}s {:03}ms", sec, ms)
}