lfs_core/
inodes.rs

1/// inode information
2///
3/// This structure isn't built if data aren't consistent
4#[derive(Debug, Clone)]
5pub struct Inodes {
6    /// number of inodes, always > 0
7    pub files: u64,
8    /// number of free inodes
9    pub ffree: u64,
10    /// number of free inodes for underpriviledged users
11    pub favail: u64,
12}
13
14impl Inodes {
15    /// Create the structure if the given values are consistent,
16    /// return None if they aren't.
17    pub fn new(
18        files: u64,
19        ffree: u64,
20        favail: u64,
21    ) -> Option<Self> {
22        if files > 0 && ffree <= files && favail <= files {
23            Some(Self {
24                files,
25                ffree,
26                favail,
27            })
28        } else {
29            None
30        }
31    }
32    /// number of non available inodes, always > 0
33    pub fn used(&self) -> u64 {
34        self.files - self.favail
35    }
36    /// share of non available inodes, always in [0, 1], never NaN
37    pub fn use_share(&self) -> f64 {
38        self.used() as f64 / self.files as f64
39    }
40}