diff options
| author | zirkonya <zirkonya@iridium.lan> | 2026-09-01 09:51:18 +0200 |
|---|---|---|
| committer | zirkonya <zirkonya@iridium.lan> | 2026-09-01 09:51:18 +0200 |
| commit | be62f065a62048b798e8bb2b8e3699bdd5b6d517 (patch) | |
| tree | 8b3f4b05838b5fa34c3ae24e35004343baadf2af /macros/src/lib.rs | |
| parent | fdc02f07cbd1994c1efb057f24a37a96faaa51fa (diff) | |
add proc macros ; benchmark ; example
Diffstat (limited to 'macros/src/lib.rs')
| -rw-r--r-- | macros/src/lib.rs | 33 |
1 files changed, 33 insertions, 0 deletions
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() +} |
