aboutsummaryrefslogtreecommitdiff
path: root/derive-macro/src/item.rs
diff options
context:
space:
mode:
Diffstat (limited to 'derive-macro/src/item.rs')
-rw-r--r--derive-macro/src/item.rs26
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
+ }
+}