1use std::time::Duration;
2
3pub fn duration_alt_display(duration: Duration) -> String {
4 let hours = duration.as_secs() / 3600;
5 let minutes = (duration.as_secs() % 3600) / 60;
6 let seconds = duration.as_secs() % 60;
7
8 if hours > 0 {
9 format!("{hours}h {minutes}m {seconds}s")
10 } else if minutes > 0 {
11 format!("{minutes}m {seconds}s")
12 } else {
13 format!("{seconds}s")
14 }
15}
16
17#[cfg(test)]
18mod tests {
19 use super::*;
20
21 #[test]
22 fn test_duration_alt_display() {
23 use duration_alt_display as f;
24 assert_eq!("0s", f(Duration::from_secs(0)));
25 assert_eq!("59s", f(Duration::from_secs(59)));
26 assert_eq!("1m 0s", f(Duration::from_secs(60)));
27 assert_eq!("10m 0s", f(Duration::from_secs(600)));
28 assert_eq!("1h 0m 0s", f(Duration::from_secs(3600)));
29 assert_eq!("3h 2m 1s", f(Duration::from_secs(3600 * 3 + 60 * 2 + 1)));
30 assert_eq!("23h 59m 59s", f(Duration::from_secs(3600 * 24 - 1)));
31 assert_eq!("100h 0m 0s", f(Duration::from_secs(3600 * 100)));
32 }
33}