use binsec::{BinResult, Detector, Format};
use clap::Parser;
use std::path::PathBuf;
#[derive(Parser)]
#[command(version, about, long_about = None)]
struct Args {
binary: PathBuf,
#[arg(short, long, value_name = "PATH")]
json: Option<String>,
#[arg(short, long, value_enum, default_value = "table")]
format: Format,
#[arg(long)]
no_report: bool,
#[arg(long, value_name = "DIR")]
output_dir: Option<PathBuf>,
}
fn main() {
let cli_args: Args = Args::parse();
if let Err(e) = run(cli_args) {
eprintln!("{e}");
}
}
fn run(args: Args) -> BinResult<()> {
let detector = Detector::run(args.binary)?;
if !args.no_report {
let output_dir: PathBuf = args.output_dir.unwrap_or_else(|| PathBuf::from("."));
detector.write_reports(&output_dir)?;
}
detector.output(args.json, args.format)?;
Ok(())
}