diff options
Diffstat (limited to 'derive/src/setters/mod.rs')
| -rw-r--r-- | derive/src/setters/mod.rs | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/derive/src/setters/mod.rs b/derive/src/setters/mod.rs index 4436c3c..ac10144 100644 --- a/derive/src/setters/mod.rs +++ b/derive/src/setters/mod.rs @@ -6,6 +6,8 @@ use syn::{self, parse_macro_input}; #[derive(Debug, FromField)] #[darling(attributes(setter))] pub struct SetterField { + ident: Option<syn::Ident>, + #[darling(default)] skip: bool, @@ -45,8 +47,14 @@ pub fn setters(input: proc_macro::TokenStream) -> proc_macro::TokenStream { .zip(quassel_fields) .filter(|(setter_field, _)| !setter_field.skip) .map(|(setter_field, quassel_field)| { + let raw_name = if let Some(name) = &quassel_field.name { + name.clone() + } else { + setter_field.ident.as_ref().unwrap().to_string() + }; + let name: String = { - let mut name = quassel_field.name.chars(); + let mut name = raw_name.chars(); format!( "set{}{}", @@ -63,7 +71,7 @@ pub fn setters(input: proc_macro::TokenStream) -> proc_macro::TokenStream { .unwrap_or({ let mut res = String::new(); - for c in quassel_field.name.chars().rev() { + for c in raw_name.chars().rev() { if c <= 'Z' && c >= 'A' { res.push(c.to_ascii_lowercase()); break; |
