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