1use std::time::{Duration, SystemTime};
2
3pub fn format_duration(duration: Duration) -> String {
4 format!(
5 "{:02}:{:02}:{:02}",
6 duration.as_secs() / 3600,
7 duration.as_secs() / 60 % 60,
8 duration.as_secs() % 60
9 )
10}
11
12pub fn unix_ms() -> u64 {
14 SystemTime::UNIX_EPOCH
15 .elapsed()
16 .unwrap_or_default()
17 .as_millis()
18 .try_into()
19 .unwrap_or(u64::MAX)
20}
21
22pub fn poll_timeout_ms(timeout: Duration) -> i32 {
24 timeout.as_millis().clamp(1, i32::MAX as u128) as i32
25}
26
27#[cfg(test)]
28mod tests {
29 use super::*;
30 #[test]
31 fn durations_and_poll_timeouts_cover_boundaries() {
32 assert_eq!(format_duration(Duration::ZERO), "00:00:00");
33 assert_eq!(format_duration(Duration::from_secs(360_061)), "100:01:01");
34 assert_eq!(poll_timeout_ms(Duration::ZERO), 1);
35 assert_eq!(poll_timeout_ms(Duration::from_nanos(1)), 1);
36 assert_eq!(poll_timeout_ms(Duration::from_millis(42)), 42);
37 assert_eq!(poll_timeout_ms(Duration::MAX), i32::MAX);
38 }
39}