fn format_duration_internal()

in rd-util/src/lib.rs [432:460]


fn format_duration_internal(dur: f64, zero: &str) -> String {
    let format_nsecs_helper = |nsecs: u64, unit: u64, max: u64, suffix: &str| -> Option<String> {
        if nsecs == 0 {
            Some(zero.to_string())
        } else if (nsecs as f64 / unit as f64) < 99.95 {
            Some(format!(
                "{:.1}{}",
                (nsecs as f64 / unit as f64).max(0.1),
                suffix
            ))
        } else if (nsecs as f64 / unit as f64) < max as f64 {
            Some(format!("{:.0}{}", nsecs as f64 / unit as f64, suffix))
        } else {
            None
        }
    };

    let nsecs = (dur * 1_000_000_000.0).round() as u64;

    format_nsecs_helper(nsecs, 10_u64.pow(0), 1000, "n")
        .or_else(|| format_nsecs_helper(nsecs, 10_u64.pow(3), 1000, "u"))
        .or_else(|| format_nsecs_helper(nsecs, 10_u64.pow(6), 1000, "m"))
        .or_else(|| format_nsecs_helper(nsecs, 10_u64.pow(9), 60, "s"))
        .or_else(|| format_nsecs_helper(nsecs, 10_u64.pow(9) * 60, 60, "M"))
        .or_else(|| format_nsecs_helper(nsecs, 10_u64.pow(9) * 60 * 60, 24, "H"))
        .or_else(|| format_nsecs_helper(nsecs, 10_u64.pow(9) * 60 * 60 * 24, 365, "D"))
        .or_else(|| format_nsecs_helper(nsecs, 10_u64.pow(9) * 60 * 60 * 24 * 365, 1000, "Y"))
        .unwrap_or_else(|| "INF".into())
}