df3 0.1.2

Advanced disk free utility - modern alternative to df command
Documentation
// File: src\lib.rs
// Author: Hadi Cahyadi <cumulus13@gmail.com>
// Date: 2026-06-16
// Description:
// License: MIT

pub mod cli;
pub mod config;
pub mod disk;
pub mod error;
pub mod output;
pub mod utils;

use anyhow::Result;
use cli::Cli;
use config::Config;

pub async fn run(cli: Cli) -> Result<()> {
    if cli.version {
        println!("df3 {}", env!("CARGO_PKG_VERSION"));
        return Ok(());
    }

    // Load configuration
    let config = Config::load(cli.config.as_deref())?;

    let mut disk_info = disk::DiskInfo::collect(
        cli.human_readable,
        cli.local_only,
        cli.all,
        &cli.fs_type,
        &cli.exclude_type,
        cli.block_size,
    )?;

    // Filter by mount points if specified
    disk_info.filter_by_mounts(&cli.mounts);

    match cli.output {
        cli::OutputFormat::Table => output::display_table(&disk_info, &cli, &config),
        cli::OutputFormat::Json => output::display_json(&disk_info)?,
        cli::OutputFormat::Csv => output::display_csv(&disk_info)?,
        cli::OutputFormat::Inodes => output::display_inodes(&disk_info, &cli, &config),
    }

    if cli.watch > 0 {
        output::watch_mode(
            cli.watch,
            cli.human_readable,
            cli.local_only,
            cli.all,
            cli.fs_type,
            cli.exclude_type,
            cli.block_size,
            config,
        )
        .await?;
    }

    Ok(())
}