#[cfg(build)]
use crate::{Case, Locale, StyleGuide};
use clap::builder::styling::{AnsiColor, Styles};
use clap::{builder, Parser};
use strum::VariantNames;
#[macro_export]
macro_rules! clap_enum_variants {
($e: ty) => {{
use builder::TypedValueParser;
builder::PossibleValuesParser::new(<$e>::VARIANTS).map(|s| s.parse::<$e>().unwrap())
}};
}
#[derive(Parser, Debug)]
#[clap(author, bin_name = "decasify")]
pub struct Cli {
#[clap(short, long, default_value_t, ignore_case = true, value_parser = clap_enum_variants!(Locale))]
pub locale: Locale,
#[clap(short, long, default_value_t, ignore_case = true, value_parser = clap_enum_variants!(Case))]
pub case: Case,
#[clap(short, long, default_value_t, ignore_case = true, value_parser = clap_enum_variants!(StyleGuide))]
pub style: StyleGuide,
#[clap(short = 'O', long, num_args(1..))]
pub overrides: Option<Vec<String>>,
pub input: Vec<String>,
}
pub const STYLES: Styles = Styles::styled()
.header(AnsiColor::Magenta.on_default().bold())
.usage(AnsiColor::Yellow.on_default().bold())
.literal(AnsiColor::BrightCyan.on_default().bold())
.placeholder(AnsiColor::Cyan.on_default())
.error(AnsiColor::BrightRed.on_default().bold())
.valid(AnsiColor::BrightGreen.on_default().bold())
.invalid(AnsiColor::BrightYellow.on_default().bold());