diff options
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() +} |
