fn format_size_internal()

in rd-util/src/lib.rs [332:366]


fn format_size_internal<T>(size: T, zero: &str) -> String
where
    T: num::ToPrimitive,
{
    let format_size_helper = |size: u64, shift: u32, suffix: &str| -> Option<String> {
        let unit: u64 = 1 << shift;

        if (size as f64 / unit as f64) < 99.95 {
            Some(format!(
                "{:.1}{}",
                (size as f64 / unit as f64).max(0.1),
                suffix
            ))
        } else if (size as f64 / unit as f64) < 1024.0 {
            Some(format!("{:.0}{}", size as f64 / unit as f64, suffix))
        } else {
            None
        }
    };

    let size = size.to_u64().unwrap();

    if size == 0 {
        zero.to_string()
    } else if size < 9999 {
        format!("{}", size)
    } else {
        format_size_helper(size, 10, "K")
            .or_else(|| format_size_helper(size, 20, "M"))
            .or_else(|| format_size_helper(size, 30, "G"))
            .or_else(|| format_size_helper(size, 40, "P"))
            .or_else(|| format_size_helper(size, 50, "E"))
            .unwrap_or_else(|| "INF".into())
    }
}