1use proc_macro::TokenStream;
2use quote::quote;
3
4#[proc_macro_derive(ExtraOps)]
5pub fn my_trait_derive(input: TokenStream) -> TokenStream {
6 let ast = syn::parse(input).unwrap();
7 impl_my_trait(&ast)
8}
9
10fn impl_my_trait(ast: &syn::DeriveInput) -> TokenStream {
11 let name = &ast.ident;
12 let generics = &ast.generics;
13 let (impl_generics, ty_generics, _) = generics.split_for_impl();
14 let gen = quote! {
15 impl #impl_generics ExtraOptions for #name #ty_generics {
16 fn modify_element(&mut self, options: Vec<Options>){
17 self.latex = self.to_latex_string();
18 for option in options {
19 self.latex = option.modify(&self.latex);
20 }
21 self.modified = true;
22 }
23 }
24 };
25 gen.into()
26}