From 41b43fea19c01727b3f9458817be78b197ed2c1c Mon Sep 17 00:00:00 2001 From: Max Audron Date: Fri, 3 Dec 2021 16:18:32 +0100 Subject: add Setters derive macro --- derive/src/lib.rs | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'derive/src/lib.rs') 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, + ty: syn::Type, + + #[darling(default)] + name: String, +} + +impl QuasselField { + pub fn parse(input: &syn::DeriveInput) -> Vec { + 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"), + } + } +} -- cgit v1.2.3 bcce5b13b1e604a4bcca22eab3ff&follow=1'>diff
Commit message (Expand)AuthorLines
2025-02-25Use BufferId in BufferInfoTobias Deiminger-5/+6
2025-02-25Use BufferId in VariantTobias Deiminger-2/+33
2025-02-25Add BufferId as Rust typeTobias Deiminger-0/+39
2025-02-25Use MsgId in MessageTobias Deiminger-18/+6
2025-02-25Use MsgId in VariantTobias Deiminger-20/+37
2025-02-25Add MsgId as Rust typeTobias Deiminger-0/+56
2025-02-24added session manager comments and log messageMax Audron-1/+3
2025-02-23add identity syncable to SessionManagerMax Audron-1/+8
2025-02-23add syncables for IrcUserMax Audron-2/+53
2025-02-23move network config to it's own file and impl it's syncMax Audron-23/+84
2025-02-23add basic network syncablesMax Audron-39/+420
2025-02-23clean up unused_import and unused_variables a bitMax Audron-2/+8
2025-02-23fix server feature errorsMax Audron-28/+23
2025-02-23fix ircchannel and maplist network representationMax Audron-154/+137
2025-02-22replace deprecated failure crate with thiserrorMax Audron-278/+194
2025-02-22update dependencies and fix errorsMax Audron-508/+332
2025-02-22update flakeMax Audron-94/+117
2024-05-22add todos to readmeMax Audron-16/+35