mod codec; mod meta; use proc_macro::TokenStream; use syn::{parse_macro_input, DeriveInput}; #[proc_macro_derive(Payload, attributes(codec))] pub fn derive_payload(input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as DeriveInput); codec::expand_payload(&input) .unwrap_or_else(syn::Error::into_compile_error) .into() } #[proc_macro_derive(Message, attributes(codec, message))] pub fn derive_message(input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as DeriveInput); let payload = match codec::expand_payload(&input) { Ok(tokens) => tokens, Err(error) => return error.into_compile_error().into(), }; let meta = match meta::expand_meta(&input) { Ok(tokens) => tokens, Err(error) => return error.into_compile_error().into(), }; let registration = meta::expand_registration(&input); quote::quote! { #payload #meta #registration } .into() }