use clap::{Args, ValueEnum};
use std::path::PathBuf;
#[derive(Debug, Args, Clone)]
pub struct ConfigArg {
#[arg(short, long, env = "PHENOTYPE_CONFIG")]
pub config: Option<PathBuf>,
}
#[derive(Debug, Args, Clone, Copy, Default)]
#[group(multiple = false)]
pub struct Verbosity {
#[arg(short, long, action = clap::ArgAction::Count)]
pub verbose: u8,
#[arg(short, long)]
pub quiet: bool,
}
impl Verbosity {
pub fn to_filter(&self) -> tracing_subscriber::filter::LevelFilter {
match (self.verbose, self.quiet) {
(_, true) => tracing_subscriber::filter::LevelFilter::ERROR,
(0, false) => tracing_subscriber::filter::LevelFilter::INFO,
(1, false) => tracing_subscriber::filter::LevelFilter::DEBUG,
_ => tracing_subscriber::filter::LevelFilter::TRACE,
}
}
}
#[derive(Debug, Clone, Copy, ValueEnum, Default, PartialEq, Eq)]
pub enum OutputFormat {
#[default]
Human,
Json,
Yaml,
}
impl std::fmt::Display for OutputFormat {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
OutputFormat::Human => write!(f, "human"),
OutputFormat::Json => write!(f, "json"),
OutputFormat::Yaml => write!(f, "yaml"),
}
}
}