summaryrefslogtreecommitdiff
path: root/macros/src/lib.rs
diff options
context:
space:
mode:
authorzirkonya <zirkonya@iridium.lan>2026-09-01 09:51:18 +0200
committerzirkonya <zirkonya@iridium.lan>2026-09-01 09:51:18 +0200
commitbe62f065a62048b798e8bb2b8e3699bdd5b6d517 (patch)
tree8b3f4b05838b5fa34c3ae24e35004343baadf2af /macros/src/lib.rs
parentfdc02f07cbd1994c1efb057f24a37a96faaa51fa (diff)
add proc macros ; benchmark ; example
Diffstat (limited to 'macros/src/lib.rs')
-rw-r--r--macros/src/lib.rs33
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()
+}