lfs_core/stats/
unix.rs

1use crate::Inodes;
2
3/// inode & blocs information
4///
5/// The semantics is mostly the one of statvfs, with addition of
6///  bused which is necessary for volumes freely growing in containers
7#[derive(Debug, Clone)]
8pub struct Stats {
9    /// block size
10    pub bsize: u64,
11    /// number of blocks
12    pub blocks: u64,
13    /// not provided by statvfs
14    pub bused: u64,
15    /// number of free blocks
16    pub bfree: u64,
17    /// number of free blocks for underprivileged users
18    pub bavail: u64,
19    /// information relative to inodes, if available
20    pub inodes: Option<Inodes>,
21}
22
23impl Stats {
24    pub fn size(&self) -> u64 {
25        self.bsize * self.blocks
26    }
27    pub fn available(&self) -> u64 {
28        self.bsize * self.bavail
29    }
30    /// Space used in the volume (including unreadable fs metadata)
31    pub fn used(&self) -> u64 {
32        self.bsize * self.bused
33    }
34    pub fn use_share(&self) -> f64 {
35        if self.blocks == 0 {
36            0.0
37        } else {
38            (self.blocks - self.bfree) as f64 / self.blocks as f64
39        }
40    }
41}