use clap::Parser;
use std::fs;
use std::path::PathBuf;
use std::process;
#[derive(Parser)]
#[command(name = "coverage-badge")]
#[command(about = "Generate a coverage badge SVG", long_about = None)]
struct Cli {
#[arg(short, long)]
coverage: f64,
#[arg(short, long)]
output: PathBuf,
}
fn main() {
let cli = Cli::parse();
if cli.coverage < 0.0 || cli.coverage > 100.0 {
eprintln!("error: coverage must be between 0 and 100, got: {}", cli.coverage);
process::exit(1);
}
let svg = coverage_badge::generate_badge(cli.coverage);
if let Some(parent) = cli.output.parent() {
if !parent.as_os_str().is_empty() && !parent.exists() {
eprintln!("error: cannot write to '{}': directory does not exist", cli.output.display());
process::exit(1);
}
}
match fs::write(&cli.output, &svg) {
Ok(_) => println!("Badge written to {}", cli.output.display()),
Err(e) => {
eprintln!("error: cannot write to '{}': {}", cli.output.display(), e);
process::exit(1);
}
}
}