35 lines
917 B
Rust
35 lines
917 B
Rust
use sysinfo::Disks;
|
|
|
|
pub fn get(disks: &Disks) -> (u64, u64, u64) {
|
|
for disk in disks.list() {
|
|
let mount = disk.mount_point().to_string_lossy();
|
|
if mount == "/" {
|
|
let total = disk.total_space();
|
|
let free = disk.available_space();
|
|
let used = total.saturating_sub(free);
|
|
return (used, free, total);
|
|
}
|
|
}
|
|
if let Some(disk) = disks.list().first() {
|
|
let total = disk.total_space();
|
|
let free = disk.available_space();
|
|
return (total.saturating_sub(free), free, total);
|
|
}
|
|
(0, 0, 0)
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
use sysinfo::Disks;
|
|
|
|
#[test]
|
|
fn test_disk_coherent() {
|
|
let disks = Disks::new_with_refreshed_list();
|
|
let (used, free, total) = get(&disks);
|
|
if total > 0 {
|
|
assert!(used + free <= total + 1024, "used + free > total");
|
|
}
|
|
}
|
|
}
|