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())
}
}