use clap::Parser;
use image_diff_review::{CompareConfig, ImageDiff, ReportConfig};
use std::path::PathBuf;
#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
struct Args {
left_path: PathBuf,
right_path: PathBuf,
#[arg(long, default_value = "Left image")]
left_title: String,
#[arg(long, default_value = "Right image")]
right_title: String,
#[arg(long, default_value_t = false)]
ignore_left_missing: bool,
#[arg(long, default_value_t = false)]
ignore_right_missing: bool,
#[arg(long, default_value_t = false)]
ignore_match: bool,
#[clap(subcommand)]
command: Command,
}
#[derive(Parser, Debug)]
struct ReportArgs {
#[arg(long, default_value = "report.html")]
output: PathBuf,
}
#[derive(Parser, Debug)]
enum Command {
Report(ReportArgs),
}
fn process_command(args: Args) -> image_diff_review::Result<()> {
let mut config = CompareConfig::default();
config.set_ignore_match(args.ignore_match);
config.set_ignore_left_missing(args.ignore_left_missing);
config.set_ignore_right_missing(args.ignore_right_missing);
let mut image_diff = ImageDiff::default();
image_diff.compare_directories(&config, &args.left_path, &args.right_path)?;
match args.command {
Command::Report(opts) => {
let mut config = ReportConfig::default();
config.set_left_title(&args.left_title);
config.set_right_title(&args.right_title);
image_diff.create_report(&config, &opts.output, true)?;
}
}
Ok(())
}
fn main() {
let args = Args::parse();
if let Err(e) = process_command(args) {
eprintln!("Error: {}", e);
std::process::exit(1);
}
}