aboutsummaryrefslogtreecommitdiff
path: root/derive/src/lib.rs
diff options
context:
space:
mode:
authorMax Audron <audron@cocaine.farm>2021-12-03 16:18:32 +0100
committerMax Audron <audron@cocaine.farm>2021-12-03 16:18:32 +0100
commit41b43fea19c01727b3f9458817be78b197ed2c1c (patch)
tree8af13b3c0fe1266bc905cbcd55ad45b86adae6c0 /derive/src/lib.rs
parentremove override_type field from network derive (diff)
add Setters derive macro
Diffstat (limited to 'derive/src/lib.rs')
-rw-r--r--derive/src/lib.rs36
1 files changed, 35 insertions, 1 deletions
diff --git a/derive/src/lib.rs b/derive/src/lib.rs
index 606e8e3..dc6e9fe 100644
--- a/derive/src/lib.rs
+++ b/derive/src/lib.rs
@@ -3,13 +3,14 @@ use syn;
mod from;
mod network;
mod sync;
+mod setters;
#[proc_macro_derive(NetworkList, attributes(network))]
pub fn network_list(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
network::network_list(input)
}
-#[proc_macro_derive(NetworkMap, attributes(network))]
+#[proc_macro_derive(NetworkMap, attributes(network, quassel))]
pub fn network_map(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
network::network_map(input)
}
@@ -19,7 +20,40 @@ pub fn from(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
from::from(input)
}
+#[proc_macro_derive(Setters, attributes(quassel))]
+pub fn setters(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
+ setters::setters(input)
+}
+
#[proc_macro]
pub fn sync(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
sync::sync(input)
}
+
+use darling::FromField;
+
+#[derive(Debug, FromField)]
+#[darling(attributes(quassel))]
+struct QuasselField {
+ ident: Option<syn::Ident>,
+ ty: syn::Type,
+
+ #[darling(default)]
+ name: String,
+}
+
+impl QuasselField {
+ pub fn parse(input: &syn::DeriveInput) -> Vec<QuasselField> {
+ match &input.data {
+ syn::Data::Struct(data) => match &data.fields {
+ syn::Fields::Named(fields) => fields
+ .named
+ .iter()
+ .map(|field| QuasselField::from_field(field).expect("Could not parse quassel field"))
+ .collect(),
+ _ => panic!("quassel: not a named field"),
+ },
+ _ => panic!("quassel: not a Struct"),
+ }
+ }
+}