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(());
}
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,
)?;
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(())
}