diff options
Diffstat (limited to 'derive-macro/src/item.rs')
-rw-r--r-- | derive-macro/src/item.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/derive-macro/src/item.rs b/derive-macro/src/item.rs new file mode 100644 index 00000000..5d3f4cdb --- /dev/null +++ b/derive-macro/src/item.rs @@ -0,0 +1,26 @@ +use syn::{self, ext::IdentExt, spanned::Spanned, Attribute, Field, Ident, LitStr, Type, Variant}; + +#[derive(Clone)] +pub struct Item { + ident: Ident, + ty: Option<Type>, + doc_comment: Vec<Method>, + value_parser: Option<ValueParser>, +} + +impl Item { + pub fn from_key_field(field: &Field) -> Self { + let ident = field.ident.clone().unwrap(); + let span = field.span(); + let ty = Ty::from_syn_ty(&field.ty); + let kind = Sp::new(Kind::Arg(ty), span); + let mut res = Self::new(Name::Derived(name), ident, Some(field.ty.clone()), kind); + let parsed_attrs = ClapAttr::parse_all(&field.attrs); + res.push_attrs(&parsed_attrs); + if matches!(&*res.kind, Kind::Arg(_)) { + res.push_doc_comment(&field.attrs, "help", Some("long_help")); + } + + res + } +} |