sz-cli 0.1.0

Disk usage CLI.
use std::fmt::Display;

use tabled::Tabled;

#[derive(Tabled, Clone, PartialEq)]
pub struct ItemSize {
    value: f64,
    units: String,
}

impl ItemSize {
    pub fn new(value: f64) -> Self {
        let (mut val, mut un) = (value, String::from(""));

        match value {
            v if v == 0.0 => {
                val = value;
                un = String::from("B");
            }

            v if v > 1.0 && v <= 1000.0 => {
                val = value;
                un = String::from("B");
            }

            v if v > 1001.0 && v <= 1000000.0 => {
                val = v / 1000.0;
                un = String::from("KB");
            }

            v if v > 1000001.0 && v <= 1000000000.0 => {
                val = v / 1000000.0;
                un = String::from("MB");
            }

            v if v > 1000000001.0 && v <= 1000000000000.0 => {
                val = v / 1000000000.0;
                un = String::from("GB");
            }

            _ => {
                val = val / 1000000000000.0;
                un = String::from("TB");
            }
        }

        Self {
            value: val,
            units: un,
        }
    }

    pub fn value(self) -> f64 {
        self.value
    }

    pub fn units(self) -> String {
        self.units
    }
}

impl Display for ItemSize {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "{:.2}{}", self.value, self.units)
    }
}