diskr-cli 1.0.0

Save your disk space, without fear of deleting the wrong thing.
Documentation
pub mod hash;
pub mod walker;
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
use std::time::SystemTime;

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FsNode {
    pub path: PathBuf,
    pub is_dir: bool,
    pub size: u64,
    pub apparent_size: u64,
    pub inode: u64,
    pub nlink: u64,
    pub modified: Option<SystemTime>,
    pub accessed: Option<SystemTime>,
    pub children: Vec<FsNode>,
}

impl FsNode {
    pub fn leaf(path: PathBuf, size: u64, apparent_size: u64, inode: u64, nlink: u64,
                modified: Option<SystemTime>, accessed: Option<SystemTime>) -> Self {
        Self { path, is_dir: false, size, apparent_size, inode, nlink, modified, accessed, children: Vec::new() }
    }
    pub fn flatten_files<'a>(&'a self, out: &mut Vec<&'a FsNode>) {
        if self.is_dir {
            for c in &self.children { c.flatten_files(out); }
        } else {
            out.push(self);
        }
    }
    pub fn sort_by_size_desc(&mut self) {
        self.children.sort_by(|a, b| b.size.cmp(&a.size));
        for c in &mut self.children {
            if c.is_dir { c.sort_by_size_desc(); }
        }
    }
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ScanResult {
    pub root: FsNode,
    pub total_size: u64,
    pub file_count: u64,
    pub dir_count: u64,
    pub scan_duration_ms: u128,
}