From be62f065a62048b798e8bb2b8e3699bdd5b6d517 Mon Sep 17 00:00:00 2001 From: zirkonya Date: Tue, 1 Sep 2026 09:51:18 +0200 Subject: add proc macros ; benchmark ; example --- macros/src/lib.rs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'macros/src/lib.rs') diff --git a/macros/src/lib.rs b/macros/src/lib.rs index 8b13789..f20edae 100644 --- a/macros/src/lib.rs +++ b/macros/src/lib.rs @@ -1 +1,34 @@ +use proc_macro::TokenStream; +use proc_macro2::TokenStream as TokenStream2; +use syn::DeriveInput; +mod decode; +mod encode; + +#[proc_macro_derive(Encode, attributes(codec, id, context))] +pub fn encode(input: TokenStream) -> TokenStream { + let input = syn::parse_macro_input!(input as DeriveInput); + encode::derive_encode(input) +} + +#[proc_macro_derive(Decode, attributes(codec, id, context))] +pub fn decode(input: TokenStream) -> TokenStream { + let input = syn::parse_macro_input!(input as DeriveInput); + decode::derive_decode(input) +} + +#[proc_macro_derive(Codec, attributes(codec, id, context))] +pub fn codec(input: TokenStream) -> TokenStream { + let input = syn::parse_macro_input!(input as DeriveInput); + let encode_impl = encode::derive_encode(input.clone()); + let decode_impl = decode::derive_decode(input.clone()); + + let encode_ts: TokenStream2 = encode_impl.into(); + let decode_ts: TokenStream2 = decode_impl.into(); + + quote::quote! { + #encode_ts + #decode_ts + } + .into() +} -- cgit v1.2.3