use std::borrow::Cow;
use std::path::Path;
use std::path::PathBuf;
use clap::ColorChoice;
use clap::Parser;
use mago_reporting::Level;
use mago_reporting::baseline::BaselineVariant;
use crate::commands::args::reporting::ReportingArgs;
use crate::service::BaselineIssueProcessor;
#[derive(Parser, Debug, Clone)]
pub struct BaselineReportingArgs {
#[arg(long, value_name = "PATH")]
pub baseline: Option<PathBuf>,
#[arg(long)]
pub generate_baseline: bool,
#[arg(long, requires = "generate_baseline")]
pub backup_baseline: bool,
#[arg(long, conflicts_with = "generate_baseline")]
pub verify_baseline: bool,
#[arg(long, conflicts_with = "generate_baseline", conflicts_with = "verify_baseline")]
pub fail_on_out_of_sync_baseline: bool,
#[arg(
long,
conflicts_with = "baseline",
conflicts_with = "generate_baseline",
conflicts_with = "verify_baseline",
conflicts_with = "backup_baseline",
conflicts_with = "fail_on_out_of_sync_baseline"
)]
pub ignore_baseline: bool,
#[clap(flatten)]
pub reporting: ReportingArgs,
}
impl BaselineReportingArgs {
pub fn get_processor(
&self,
color_choice: ColorChoice,
baseline: Option<&Path>,
baseline_variant: BaselineVariant,
editor_url: Option<String>,
config_minimum_fail_level: Level,
) -> BaselineIssueProcessor {
BaselineIssueProcessor {
baseline_path: if self.ignore_baseline {
None
} else {
match &self.baseline {
Some(path) => Some(Cow::Owned(path.to_path_buf())),
None => baseline.map(|p| Cow::Owned(p.to_path_buf())),
}
},
generate_baseline: self.generate_baseline,
backup_baseline: self.backup_baseline,
verify_baseline: self.verify_baseline,
fail_on_out_of_sync_baseline: self.fail_on_out_of_sync_baseline,
baseline_variant,
issue_processor: self.reporting.get_processor(color_choice, editor_url, config_minimum_fail_level),
}
}
}