36 lines
715 B
Rust
36 lines
715 B
Rust
use proc_macro::TokenStream;
|
|
use quote::quote;
|
|
use syn::{parse::Parser, parse_macro_input, DeriveInput};
|
|
|
|
#[proc_macro_attribute]
|
|
pub fn uses_base_template(_attr: TokenStream, item: TokenStream) -> TokenStream {
|
|
let mut input = parse_macro_input!(item as DeriveInput);
|
|
|
|
let base_template_field = syn::Field::parse_named
|
|
.parse2(
|
|
quote! {
|
|
pub base_template: BaseTemplate
|
|
}
|
|
.into(),
|
|
)
|
|
.unwrap();
|
|
|
|
match &mut input.data {
|
|
syn::Data::Struct(ref mut struct_data) => {
|
|
match &mut struct_data.fields {
|
|
syn::Fields::Named(fields) => {
|
|
fields.named.push(base_template_field);
|
|
}
|
|
_ => (),
|
|
}
|
|
return quote! {
|
|
#input
|
|
}
|
|
.into();
|
|
}
|
|
_ => {
|
|
panic!("bad")
|
|
}
|
|
};
|
|
}
|