fixed fn is_field_without_subcommand()

This commit is contained in:
FroVolod 2022-02-16 16:48:50 +02:00
parent eca1aba016
commit 80d5022bba
3 changed files with 24 additions and 21 deletions

View file

@ -4,12 +4,11 @@ use proc_macro_error::abort_call_site;
use syn;
use quote::quote;
pub fn field_without_subcommand(field: &syn::Field) -> proc_macro2::TokenStream {
let ident_field = &field.clone().ident.expect("this field does not exist");
pub fn is_field_without_subcommand(field: &syn::Field) -> bool {
if field.attrs.is_empty() {
quote! {#ident_field}
} else {
match field.attrs.iter()
return true
}
match field.attrs.iter()
.filter(|attr| attr.path.is_ident("interactive_clap".into()))
.map(|attr| attr.tokens.clone())
.flatten()
@ -25,12 +24,8 @@ pub fn field_without_subcommand(field: &syn::Field) -> proc_macro2::TokenStream
_ => abort_call_site!("Only option `TokenTree::Group` is needed")
}
})
.map(|_| {
quote! {#ident_field}
})
.next() {
Some(token_stream) => token_stream,
None => quote! ()
Some(token_stream) => true,
None => false
}
}
}

View file

@ -15,11 +15,15 @@ pub fn from_cli_for_struct(ast: &syn::DeriveInput, fields: &syn::Fields) -> proc
return quote! ();
};
let fields_without_subcommand = fields.iter().map(|field| {
super::fields_without_subcommand::field_without_subcommand(field)
})
.filter(|token_stream| !token_stream.is_empty())
.collect::<Vec<_>>();
let fields_without_subcommand = fields.iter()
.filter(|field| {
super::fields_without_subcommand::is_field_without_subcommand(field)
})
.map(|field| {
let ident_field = &field.clone().ident.expect("this field does not exist");
quote! {#ident_field}
})
.collect::<Vec<_>>();
let fields_value = fields.iter().map(|field| {
fields_value(field)

View file

@ -11,11 +11,15 @@ pub fn from_cli_arg(ast: &syn::DeriveInput, fields: &syn::Fields) -> Vec<proc_ma
return vec![quote! ()];
};
let fields_without_subcommand = fields.iter().map(|field| {
super::fields_without_subcommand::field_without_subcommand(field)
})
.filter(|token_stream| !token_stream.is_empty())
.collect::<Vec<_>>();
let fields_without_subcommand = fields.iter()
.filter(|field| {
super::fields_without_subcommand::is_field_without_subcommand(field)
})
.map(|field| {
let ident_field = &field.clone().ident.expect("this field does not exist");
quote! {#ident_field}
})
.collect::<Vec<_>>();
let fields_with_skip_default_from_cli = fields.iter().map(|field| {
super::fields_with_skip_default_from_cli::field_with_skip_default_from_cli(field)