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() }