use clap::{Parser, ValueEnum};
use std::path::PathBuf;
use crate::finding::Severity;
#[derive(Debug, Parser)]
#[command(name = "cargo", bin_name = "cargo")]
pub enum Cargo {
BuildRx(Args),
}
#[derive(Debug, Parser)]
#[command(version, about = "Compile-time diagnostic and prescription tool")]
pub struct Args {
#[arg(long, default_value = "terminal")]
pub format: Format,
#[arg(long, value_delimiter = ',')]
pub only: Vec<String>,
#[arg(long, value_delimiter = ',')]
pub skip: Vec<String>,
#[arg(long, default_value = "info")]
pub min_severity: SeverityFilter,
#[arg(long)]
pub manifest_path: Option<PathBuf>,
}
#[derive(Debug, Clone, Copy, ValueEnum)]
pub enum Format {
Terminal,
Json,
}
#[derive(Debug, Clone, Copy, ValueEnum)]
pub enum SeverityFilter {
Fix,
Warn,
Info,
}
impl SeverityFilter {
pub fn passes(&self, severity: Severity) -> bool {
match self {
SeverityFilter::Info => true,
SeverityFilter::Warn => matches!(severity, Severity::Fix | Severity::Warn),
SeverityFilter::Fix => matches!(severity, Severity::Fix),
}
}
}