extern crate proc_macro;
use quote::quote;
use syn::parse_macro_input;
#[proc_macro_attribute]
pub fn event(
_args: proc_macro::TokenStream,
input: proc_macro::TokenStream,
) -> proc_macro::TokenStream {
let event_strct = parse_macro_input!(input as syn::ItemEnum);
let event_name = &event_strct.ident;
let (impl_gen, type_gen, where_clause) = event_strct.generics.split_for_impl();
proc_macro::TokenStream::from({
quote! {
#[derive(BorshSerialize, BorshDeserialize, PartialEq, Eq, Debug, Clone)]
#event_strct
#[automatically_derived]
impl #impl_gen #event_name #type_gen #where_clause {
pub fn wrap<'info>(&self, noop_program: AccountInfo<'info>) -> ProgramResult {
invoke(
&spl_noop::instruction(self.try_to_vec()?),
&[noop_program],
)
}
}
}
})
}