41 lines · 1.2 KB · Rust
RawDownload
use std::time::Duration; pub fn duration_alt_display(duration: Duration) -> String {    if duration < Duration::from_secs(60) {        format!("{}s", duration.as_secs())    } else {        duration_clock_format(duration)    }} fn duration_clock_format(duration: Duration) -> String {    let hours = duration.as_secs() / 3600;    let minutes = (duration.as_secs() % 3600) / 60;    let seconds = duration.as_secs() % 60;     if hours > 0 {        format!("{hours}:{minutes:02}:{seconds:02}")    } else if minutes > 0 {        format!("{minutes}:{seconds:02}")    } else {        format!("{seconds}")    }} #[cfg(test)]mod tests {    use super::*;     #[test]    fn test_duration_to_clock_format() {        use duration_clock_format as f;        assert_eq!("0", f(Duration::from_secs(0)));        assert_eq!("59", f(Duration::from_secs(59)));        assert_eq!("1:00", f(Duration::from_secs(60)));        assert_eq!("10:00", f(Duration::from_secs(600)));        assert_eq!("1:00:00", f(Duration::from_secs(3600)));        assert_eq!("3:02:01", f(Duration::from_secs(3600 * 3 + 60 * 2 + 1)));        assert_eq!("23:59:59", f(Duration::from_secs(3600 * 24 - 1)));        assert_eq!("100:00:00", f(Duration::from_secs(3600 * 100)));    }}