meowy-webring/proc-macros/src/lib.rs

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")
}
};
}