evaluator: Verify if input files are decompressible
[ouch.git] / src / bytes.rs
blobcd7e9b307dec5436eccdb72009a880ccdec78de8
1 use std::cmp;
3 const UNITS: [&str; 4] = ["B", "kB", "MB", "GB"];
5 pub struct Bytes {
6     bytes: f64,
9 impl Bytes {
10     pub fn new(bytes: u64) -> Self {
11         Self {
12             bytes: bytes as f64,
13         }
14     }
17 impl std::fmt::Display for Bytes {
18     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
19         let num = self.bytes;
20         debug_assert!(num >= 0.0);
21         if num < 1_f64 {
22             return write!(f, "{} B", num);
23         }
24         let delimiter = 1000_f64;
25         let exponent = cmp::min((num.ln() / 6.90775).floor() as i32, 4);
27         write!(f, "{:.2} ", num / delimiter.powi(exponent))?;
28         write!(f, "{}", UNITS[exponent as usize])
29     }