use clap::Args;
use clap::ValueEnum;
#[derive(Args, Debug)]
pub(crate) struct ImplicitParsers {
#[arg(short = 'O')]
optimization: Option<usize>,
#[arg(short = 'I', value_name = "DIR", value_hint = clap::ValueHint::DirPath)]
include: Option<std::path::PathBuf>,
#[arg(long)]
bind: Option<std::net::IpAddr>,
#[arg(long)]
sleep: Option<jiff::SignedDuration>,
#[arg(long)]
bump_level: Option<BumpLevel>,
}
#[derive(Debug, Clone, Copy, ValueEnum)]
#[value(rename_all = "kebab-case")]
pub(crate) enum BumpLevel {
Major,
Minor,
Patch,
}
impl std::fmt::Display for BumpLevel {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
use clap::ValueEnum;
self.to_possible_value()
.expect("no values are skipped")
.get_name()
.fmt(f)
}
}
impl std::str::FromStr for BumpLevel {
type Err = String;
fn from_str(s: &str) -> Result<Self, Self::Err> {
use clap::ValueEnum;
for variant in Self::value_variants() {
if variant.to_possible_value().unwrap().matches(s, false) {
return Ok(*variant);
}
}
Err(format!("Invalid variant: {s}"))
}
}