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 {
#[arg(short, default_value = "blake3")]
algorithm: Hash,
#[arg(short, long, default_value = "rayon-par-iter")]
process: ProcessOption,
files: Vec<PathBuf>,
}
fn main() {
let cli = Cli::parse();
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}"),
}
}
}