use crate::Inodes;
#[derive(Debug, Clone)]
pub struct Stats {
pub bsize: u64,
pub blocks: u64,
pub bused: u64,
pub bfree: u64,
pub bavail: u64,
pub inodes: Option<Inodes>,
}
#[derive(Debug, snafu::Snafu, Clone, Copy, PartialEq, Eq)]
#[snafu(visibility(pub(crate)))]
pub enum StatsError {
#[snafu(display("Could not stat mount point"))]
Unreachable,
#[snafu(display("Unconsistent stats"))]
Unconsistent,
#[snafu(display("Excluded"))]
Excluded,
}
impl Stats {
pub fn size(&self) -> u64 {
self.bsize * self.blocks
}
pub fn available(&self) -> u64 {
self.bsize * self.bavail
}
pub fn used(&self) -> u64 {
self.bsize * self.bused
}
pub fn use_share(&self) -> f64 {
if self.blocks == 0 {
0.0
} else {
(self.blocks - self.bfree) as f64 / self.blocks as f64
}
}
}