fhc 0.12.0

File hash checker (BLAKE3, SHA256, SHA512)
Documentation
use {
    clap::{CommandFactory, Parser},
    clap_cargo::style::CLAP_STYLING,
    fhc::{Hash, ProcessOption},
    std::path::PathBuf,
};

#[derive(Parser)]
#[command(about, version, max_term_width = 80, styles = CLAP_STYLING)]
struct Cli {
    /// Algorithm
    #[arg(short, default_value = "blake3")]
    algorithm: Hash,

    /// Approach for processing multiple files
    #[arg(short, long, default_value = "rayon-par-iter")]
    process: ProcessOption,

    /// File(s)
    files: Vec<PathBuf>,
}

fn main() {
    let cli = Cli::parse();

    // Print help if no files or arguments
    if cli.files.is_empty() {
        let mut cmd = Cli::command();
        cmd.build();
        cmd.print_help().unwrap();
        return;
    }

    let process = if cli.files.len() == 1 {
        ProcessOption::SequentialForLoop
    } else {
        cli.process.clone()
    };

    for result in process.run(&cli.files, cli.algorithm) {
        match result {
            Ok(result) => println!("{result}"),
            Err(e) => eprintln!("ERROR: {e}"),
        }
    }
}