sourceright 0.1.20

Reference verification infrastructure for academic and legal citation workflows.
Documentation
use std::path::PathBuf;

fn main() {
    let mut json = false;
    let mut manifest = None;
    let mut args = std::env::args().skip(1);

    while let Some(arg) = args.next() {
        match arg.as_str() {
            "--help" | "-h" => {
                println!(
                    "sourceright bench\n\nUsage:\n  bench [--json] [--manifest <tasks.yaml>]\n  bench [--json] <tasks.yaml>"
                );
                return;
            }
            "--json" => json = true,
            "--manifest" => {
                manifest = Some(PathBuf::from(args.next().unwrap_or_else(|| {
                    eprintln!("bench requires benchmark manifest path");
                    std::process::exit(2);
                })));
            }
            _ if arg.starts_with('-') => {
                eprintln!("unexpected argument for `bench`: {arg}");
                std::process::exit(2);
            }
            _ if manifest.is_none() => manifest = Some(PathBuf::from(arg)),
            _ => {
                eprintln!("unexpected argument for `bench`: {arg}");
                std::process::exit(2);
            }
        }
    }

    let manifest = manifest.unwrap_or_else(|| PathBuf::from("sourceright-bench/tasks.yaml"));

    match sourceright::run_benchmark_suite(&manifest) {
        Ok(report) => {
            if json {
                println!(
                    "{}",
                    serde_json::to_string(&report).expect("serialize benchmark report")
                );
            } else {
                print!("{}", report.summary_text());
            }
            if report.failed_count > 0 {
                std::process::exit(1);
            }
        }
        Err(error) => {
            eprintln!("{error}");
            std::process::exit(1);
        }
    }
}