use crate::output::Format;
use clap::{Args, Parser, Subcommand};
use std::path::PathBuf;
#[derive(Parser)]
#[command(name = "unsafe-budget")]
#[command(about = "keeps the unsafety demons out. an unsafe code budget gate for CI pipelines.")]
#[command(version)]
pub struct Cli {
#[command(subcommand)]
pub command: Command,
}
#[derive(Subcommand)]
pub enum Command {
Scan(ScanArgs),
Check(ScanArgs),
Update(ScanArgs),
Plugins(PluginsArgs),
}
#[derive(Args, Clone)]
pub struct ScanArgs {
#[arg(long, default_value = "text")]
pub format: Format,
#[arg(long, default_value = "auto")]
pub analyzer: String,
#[arg(long)]
pub workspace_only: bool,
#[arg(long)]
pub include_deps: bool,
#[arg(long)]
pub no_deps: bool,
#[arg(long, value_delimiter = ',')]
pub features: Vec<String>,
#[arg(long)]
pub all_features: bool,
#[arg(long)]
pub no_default_features: bool,
#[arg(long)]
pub all_targets: bool,
#[arg(long, value_delimiter = ',')]
pub targets: Vec<String>,
#[arg(long)]
pub manifest_path: Option<PathBuf>,
#[arg(long)]
pub config: Option<PathBuf>,
#[arg(long)]
pub details: bool,
#[arg(long)]
pub plugin_timeout: Option<u64>,
}
#[derive(Args)]
pub struct PluginsArgs {
#[arg(long, default_value = "text")]
pub format: Format,
}
pub fn parse() -> Cli {
let mut args: Vec<String> = std::env::args().collect();
if args.len() > 1 && args[1] == "unsafe-budget" {
args.remove(1);
}
Cli::parse_from(args)
}