From 032e28dc3d7bdb759bde879ba9f42a68ae23e25b Mon Sep 17 00:00:00 2001 From: Max Audron Date: Wed, 1 Dec 2021 16:19:54 +0100 Subject: add sync proc macro --- derive/src/lib.rs | 6 ++++++ derive/src/sync/mod.rs | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 derive/src/sync/mod.rs (limited to 'derive') diff --git a/derive/src/lib.rs b/derive/src/lib.rs index f3608eb..606e8e3 100644 --- a/derive/src/lib.rs +++ b/derive/src/lib.rs @@ -2,6 +2,7 @@ use syn; mod from; mod network; +mod sync; #[proc_macro_derive(NetworkList, attributes(network))] pub fn network_list(input: proc_macro::TokenStream) -> proc_macro::TokenStream { @@ -17,3 +18,8 @@ pub fn network_map(input: proc_macro::TokenStream) -> proc_macro::TokenStream { pub fn from(input: proc_macro::TokenStream) -> proc_macro::TokenStream { from::from(input) } + +#[proc_macro] +pub fn sync(input: proc_macro::TokenStream) -> proc_macro::TokenStream { + sync::sync(input) +} diff --git a/derive/src/sync/mod.rs b/derive/src/sync/mod.rs new file mode 100644 index 0000000..40dea74 --- /dev/null +++ b/derive/src/sync/mod.rs @@ -0,0 +1,43 @@ +use quote::quote; +use syn::{ + self, bracketed, + parse::{Parse, ParseStream}, + parse_macro_input, + punctuated::Punctuated, + token, Expr, Result, Token, +}; + +#[derive(Debug)] +struct Sync { + name: Expr, + token: Token![,], + brace_token: token::Bracket, + fields: Punctuated, +} + +impl Parse for Sync { + fn parse(input: ParseStream) -> Result { + let content; + Ok(Sync { + name: input.parse()?, + token: input.parse()?, + brace_token: bracketed!(content in input), + fields: content.parse_terminated(Expr::parse)?, + }) + } +} + +pub fn sync(input: proc_macro::TokenStream) -> proc_macro::TokenStream { + let input = parse_macro_input!(input as Sync); + let name = input.name; + let values = input.fields.iter(); + + let gen = quote! { + self.send_sync( + #name, + vec![#(#values.into()),*], + ) + }; + + gen.into() +} -- cgit v1.2.3 ption>
Commit message (Expand)AuthorLines
9 daysimprove network from_network_list implMax Audron-100/+8
9 daysNetworkMap error handlingMax Audron-158/+153
9 daysadd more git remotesmasterMax Audron-0/+13
9 daysadd error for unkown sync message slot_nameMax Audron-43/+51
9 daysNetworkList and signalproxy objects error handlingMax Audron-504/+693
9 daysSyncable trait error handlingMax Audron-91/+152
9 dayshandshare and signalproxy/rpccall error handlingMax Audron-91/+165
9 daysuse ProtocolError for From deriveMax Audron-7/+7
10 daysclean up clippy lintsMax Audron-259/+242
10 daysreplace all match_variant instances with try_intoMax Audron-134/+111
2025-07-27remove old readme.orgMax Audron-35/+0
2025-07-27temporarly fix nested network repr parsing for variant typesMax Audron-39/+39
2025-07-27fix sessioninit message wrongly using NetworkMap to convert a fieldMax Audron-4/+5
2025-03-03update roadmapMax Audron-2/+10
2025-03-01implement rpc callsMax Audron-64/+762
2025-03-01add UserType implementation for required signalproxy objectsMax Audron-13/+131
2025-03-01remove old quassel attributes from derive macrosMax Audron-37/+36
2025-02-27extend docs and reorganize filesMax Audron-1281/+321
2025-02-26implement NetworkId UserTypeMax Audron-108/+196
2025-02-26implement IdentityIdMax Audron-8/+79
2025-02-26refactor variant deserializationMax Audron-123/+59
2025-02-26refactor deserialize and serializevariant traitMax Audron-90/+80
2025-02-26refactor variant serialization codeMax Audron-256/+405
2025-02-26add MsgId and BufferId to objects where neededMax Audron-141/+157
2025-02-25enable transparent repr for msgid and bufferidMax Audron-0/+2
2025-02-25Implement BacklogManagerTobias Deiminger-59/+113
2025-02-25Use BufferId in BufferInfoTobias Deiminger-10/+11
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