~starkingdoms/starkingdoms

ref: b6949834d53aadf53fa99b5f914a3dac09702395 starkingdoms/crates/proc/src/lib.rs -rw-r--r-- 762 bytes
b6949834 — core replication experiment 5 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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()
}