mirror of
https://github.com/clap-rs/clap
synced 2024-12-13 22:32:33 +00:00
refactor(ArgEnum): replace unwrap with except, arg_value -> to_arg_value
This commit is contained in:
parent
3b2e3ffddf
commit
08e8c53862
5 changed files with 14 additions and 10 deletions
|
@ -48,7 +48,7 @@ pub fn gen_for_enum(name: &Ident, attrs: &[Attribute], e: &DataEnum) -> TokenStr
|
||||||
|
|
||||||
let lits = lits(&e.variants, &attrs);
|
let lits = lits(&e.variants, &attrs);
|
||||||
let arg_values = gen_arg_values(&lits);
|
let arg_values = gen_arg_values(&lits);
|
||||||
let arg_value = gen_arg_value(&lits);
|
let to_arg_value = gen_to_arg_value(&lits);
|
||||||
|
|
||||||
quote! {
|
quote! {
|
||||||
#[allow(dead_code, unreachable_code, unused_variables)]
|
#[allow(dead_code, unreachable_code, unused_variables)]
|
||||||
|
@ -65,7 +65,7 @@ pub fn gen_for_enum(name: &Ident, attrs: &[Attribute], e: &DataEnum) -> TokenStr
|
||||||
#[deny(clippy::correctness)]
|
#[deny(clippy::correctness)]
|
||||||
impl clap::ArgEnum for #name {
|
impl clap::ArgEnum for #name {
|
||||||
#arg_values
|
#arg_values
|
||||||
#arg_value
|
#to_arg_value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -109,11 +109,11 @@ fn gen_arg_values(lits: &[(TokenStream, Ident)]) -> TokenStream {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn gen_arg_value(lits: &[(TokenStream, Ident)]) -> TokenStream {
|
fn gen_to_arg_value(lits: &[(TokenStream, Ident)]) -> TokenStream {
|
||||||
let (lit, variant): (Vec<TokenStream>, Vec<Ident>) = lits.iter().cloned().unzip();
|
let (lit, variant): (Vec<TokenStream>, Vec<Ident>) = lits.iter().cloned().unzip();
|
||||||
|
|
||||||
quote! {
|
quote! {
|
||||||
fn arg_value<'a>(&self) -> Option<clap::ArgValue<'a>> {
|
fn to_arg_value<'a>(&self) -> Option<clap::ArgValue<'a>> {
|
||||||
match self {
|
match self {
|
||||||
#(Self::#variant => Some(#lit),)*
|
#(Self::#variant => Some(#lit),)*
|
||||||
_ => None
|
_ => None
|
||||||
|
|
|
@ -361,7 +361,7 @@ pub fn gen_augment(
|
||||||
|
|
||||||
fn gen_arg_enum_possible_values(ty: &Type) -> TokenStream {
|
fn gen_arg_enum_possible_values(ty: &Type) -> TokenStream {
|
||||||
quote_spanned! { ty.span()=>
|
quote_spanned! { ty.span()=>
|
||||||
.possible_values(<#ty as clap::ArgEnum>::value_variants().iter().filter_map(clap::ArgEnum::arg_value))
|
.possible_values(<#ty as clap::ArgEnum>::value_variants().iter().filter_map(clap::ArgEnum::to_arg_value))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -82,7 +82,7 @@ pub fn arg_enum(name: &Ident) {
|
||||||
fn from_str(_input: &str, _case_insensitive: bool) -> Result<Self, String> {
|
fn from_str(_input: &str, _case_insensitive: bool) -> Result<Self, String> {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
}
|
}
|
||||||
fn arg_value<'a>(&self) -> Option<clap::ArgValue<'a>>{
|
fn to_arg_value<'a>(&self) -> Option<clap::ArgValue<'a>>{
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,7 +54,7 @@ fn default_value() {
|
||||||
|
|
||||||
impl std::fmt::Display for ArgChoice {
|
impl std::fmt::Display for ArgChoice {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
|
||||||
std::fmt::Display::fmt(self.arg_value().unwrap().get_name(), f)
|
std::fmt::Display::fmt(self.to_arg_value().unwrap().get_name(), f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -370,7 +370,7 @@ fn skip_variant() {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
ArgChoice::value_variants()
|
ArgChoice::value_variants()
|
||||||
.iter()
|
.iter()
|
||||||
.map(ArgEnum::arg_value)
|
.map(ArgEnum::to_arg_value)
|
||||||
.map(Option::unwrap)
|
.map(Option::unwrap)
|
||||||
.collect::<Vec<_>>(),
|
.collect::<Vec<_>>(),
|
||||||
vec![ArgValue::new("foo"), ArgValue::new("bar")]
|
vec![ArgValue::new("foo"), ArgValue::new("bar")]
|
||||||
|
|
|
@ -289,7 +289,11 @@ pub trait ArgEnum: Sized + Clone {
|
||||||
fn from_str(input: &str, case_insensitive: bool) -> Result<Self, String> {
|
fn from_str(input: &str, case_insensitive: bool) -> Result<Self, String> {
|
||||||
Self::value_variants()
|
Self::value_variants()
|
||||||
.iter()
|
.iter()
|
||||||
.find(|v| v.arg_value().unwrap().matches(input, case_insensitive))
|
.find(|v| {
|
||||||
|
v.to_arg_value()
|
||||||
|
.expect("ArgEnum::value_variants contains only values with a corresponding ArgEnum::to_arg_value")
|
||||||
|
.matches(input, case_insensitive)
|
||||||
|
})
|
||||||
.cloned()
|
.cloned()
|
||||||
.ok_or_else(|| format!("Invalid variant: {}", input))
|
.ok_or_else(|| format!("Invalid variant: {}", input))
|
||||||
}
|
}
|
||||||
|
@ -297,7 +301,7 @@ pub trait ArgEnum: Sized + Clone {
|
||||||
/// The canonical argument value.
|
/// The canonical argument value.
|
||||||
///
|
///
|
||||||
/// The value is `None` for skipped variants.
|
/// The value is `None` for skipped variants.
|
||||||
fn arg_value<'a>(&self) -> Option<ArgValue<'a>>;
|
fn to_arg_value<'a>(&self) -> Option<ArgValue<'a>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Clap> Clap for Box<T> {
|
impl<T: Clap> Clap for Box<T> {
|
||||||
|
|
Loading…
Reference in a new issue