use crate::{
common::{
list_of_regions::{CliRegionsArgs, CliTargetsArgs},
reference::CliReferenceArg,
},
vcf::pipeline::{self, PipelineSettings},
};
#[derive(clap::Args, Debug, Default)]
#[group(multiple = false)]
pub struct OutputFilter {
#[arg(long)]
pub only_realigned: bool,
#[arg(long, value_name = "BASES")]
pub realigned_and_context: Option<u64>,
}
#[derive(clap::Args, Debug, Default)]
pub struct OutputOptions {
#[arg(short = 'o', long = "output", value_name = "FILE")]
pub output_file: Option<String>,
#[command(flatten)]
pub output_filter: OutputFilter,
}
impl<T: ToString> From<Option<T>> for OutputOptions {
fn from(value: std::option::Option<T>) -> Self {
Self {
output_file: value.map(|v| v.to_string()),
output_filter: OutputFilter::default(),
}
}
}
#[derive(clap::Args, Debug)]
pub struct Command {
pub input: String,
#[command(flatten)]
pub reference: CliReferenceArg,
#[command(flatten)]
pub regions: CliRegionsArgs,
#[command(flatten)]
pub targets: CliTargetsArgs,
#[command(flatten)]
pub output: OutputOptions,
#[arg(long = "no-version")]
pub no_version: bool,
#[arg(long = "output-regions", value_name = "FILE")]
pub ts_regions: Option<String>,
#[arg(short = 'b', long = "bam-file", value_name = "FILE")]
pub bam_f: Option<String>,
#[command(flatten)]
pub pipeline_settings: pipeline::PipelineSettings,
}
impl Default for Command {
fn default() -> Self {
Self {
input: "-".into(),
reference: CliReferenceArg::default(),
regions: CliRegionsArgs::default(),
targets: CliTargetsArgs::default(),
output: OutputOptions::default(),
no_version: false,
ts_regions: None,
bam_f: None,
pipeline_settings: PipelineSettings::default(),
}
}
}