use proc_macro2::TokenStream; use quote::quote; use syn::{parse_macro_input, DeriveInput}; #[proc_macro_attribute] pub fn replicable(_metadata: proc_macro::TokenStream, input: proc_macro::TokenStream) -> proc_macro::TokenStream { let input: TokenStream = input.into(); let output = quote! { #[derive(::serde::Serialize, ::serde::Deserialize, ::starkingdoms_proc::_Replicable)] #input }; output.into() } #[proc_macro_derive(_Replicable)] pub fn derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream { let DeriveInput { ident, .. } = parse_macro_input!(input); let output = quote! { #[typetag::serde] impl crate::replication::Replicable for #ident {} }; output.into() }