1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use quote::quote;
use proc_macro::TokenStream;

#[proc_macro_attribute]
pub fn message (
    _:    TokenStream, // takes no arguments
    body: TokenStream  // annotates a struct declaration
) -> TokenStream {
    let body: proc_macro2::TokenStream = body.into();
    TokenStream::from(quote! {
        #[derive(Clone,Debug,PartialEq,serde::Serialize,serde::Deserialize,schemars::JsonSchema)]
        #[serde(rename_all="snake_case")]
        #body
    })
}