1use proc_macro::TokenStream;
2use quote::quote;
3use syn;
4
5#[proc_macro_derive(Apply)]
6pub fn apply_derive(input: TokenStream) -> TokenStream {
7 let ast: syn::DeriveInput = syn::parse(input).unwrap();
8 let name = &ast.ident;
9 let gen = quote! {
10 impl Apply for #name {
11 fn apply(&mut self, input: Self::Input) -> Self::Output {
12 self.execute(input, &ExecutionContext::Apply)
13 }
14 }
15 };
16 gen.into()
17}
18
19#[proc_macro_derive(Evaluate)]
20pub fn evaluate_derive(input: TokenStream) -> TokenStream {
21 let ast: syn::DeriveInput = syn::parse(input).unwrap();
22 let name = &ast.ident;
23 let gen = quote! {
24 impl Evaluate for #name {
25 fn evaluate(&mut self, input: Self::Input) -> Self::Output {
26 self.execute(input, &ExecutionContext::Evaluate)
27 }
28 }
29 };
30 gen.into()
31}