indicato_rs_proc/
lib.rs

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}