27 lines
639 B
Rust
27 lines
639 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
|
|
})
|
|
.unwrap();
|
|
|
|
if let syn::Data::Struct(ref mut struct_data) = &mut input.data {
|
|
if let syn::Fields::Named(fields) = &mut struct_data.fields {
|
|
fields.named.push(base_template_field);
|
|
}
|
|
quote! {
|
|
#input
|
|
}
|
|
.into()
|
|
} else {
|
|
panic!("bad")
|
|
}
|
|
}
|