rustop-rs 0.4.6

Linux system information parser
Documentation
pub fn conv_p(total: u64, free: u64) -> u64 {
    match total {
        0 => 0,
        _ => free * 100 / total,
    }
}

pub fn conv_b(bytes: u64) -> String {
    let n: f64 = bytes as f64;
    if n < 1024. {
        format!("{} B", n)
    } else if 1024. <= n && n < u64::pow(1024, 2) as f64 {
        let s = n / 1024.;
        format!("{:.2} KB", s)
    } else if u64::pow(1024, 2) as f64 <= n && n < u64::pow(1024, 3) as f64 {
        let s = n / u64::pow(1024, 2) as f64;
        format!("{:.2} MB", s)
    } else if u64::pow(1024, 3) as f64 <= n && n < u64::pow(1024, 4) as f64 {
        let s = n / u64::pow(1024, 3) as f64;
        format!("{:.2} GB", s)
    } else {
        let s = n / u64::pow(1024, 4) as f64;
        format!("{:.2} TB", s)
    }
}

#[allow(dead_code)]
pub fn conv_t(sec: f64) -> String {
    if sec < 60. {
        format!("{} seconds", sec)
    } else if 60. <= sec && sec < u64::pow(60, 2) as f64 {
        let minutes = (sec / 60.).floor();
        let seconds = (sec % 60.).floor();
        format!("{} minutes {} seconds", minutes, seconds)
    } else if u64::pow(60, 2) as f64 <= sec && sec < u64::pow(60, 3) as f64 {
        let hours = (sec / u64::pow(60, 2) as f64).floor();
        let minutes = ((sec % u64::pow(60, 2) as f64) / 60.).floor();
        let seconds = ((sec % u64::pow(60, 2) as f64) % 60.).floor();
        format!("{} hours {} minutes {} seconds", hours, minutes, seconds)
    } else {
        let days = (sec / (u64::pow(60, 2) as f64 * 24.)).floor();
        let hours = ((sec % (u64::pow(60, 2) as f64 * 24.)) / u64::pow(60, 2) as f64).floor();
        let minutes =
            (((sec % (u64::pow(60, 2) as f64 * 24.)) % u64::pow(60, 2) as f64) / 60.).floor();
        let seconds =
            (((sec % (u64::pow(60, 2) as f64 * 24.)) % u64::pow(60, 2) as f64) % 60.).floor();
        format!(
            "{} days {} hours {} minutes {} seconds",
            days, hours, minutes, seconds
        )
    }
}

pub fn conv_hex_to_ip(hex_addr: &str) -> Result<String, std::num::ParseIntError> {
    if hex_addr.len() == 8 {
        let first_oct = u8::from_str_radix(&hex_addr[6..8], 16)?;
        let second_oct = u8::from_str_radix(&hex_addr[4..6], 16)?;
        let third_oct = u8::from_str_radix(&hex_addr[2..4], 16)?;
        let fourth_oct = u8::from_str_radix(&hex_addr[..2], 16)?;

        Ok(format!(
            "{}.{}.{}.{}",
            first_oct, second_oct, third_oct, fourth_oct
        ))
    } else {
        Ok("".to_string())
    }
}