float_pigment_forest_macro/
lib.rs1use quote::quote;
2use syn::{parse_macro_input, ItemStruct};
3
4mod style_manager;
5
6#[proc_macro_derive(StyleManagerGetter)]
7pub fn style_manager_getter(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
8 style_manager::gen_getter(input)
9}
10
11#[proc_macro_derive(StyleManagerSetter)]
12pub fn style_manager_setter(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
13 style_manager::gen_setter(input)
14}
15
16#[proc_macro_derive(StyleManagerMutation)]
17pub fn style_manager_mutation(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
18 style_manager::gen_mutation(input)
19}
20
21#[proc_macro_derive(FieldCount)]
22pub fn derive_field_count(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
23 let input = parse_macro_input!(input as ItemStruct);
24
25 let name = &input.ident;
26 let field_count = input.fields.iter().count();
27
28 let output = quote! {
29 impl #name {
30 pub(crate) fn field_count(&self) -> usize {
31 #field_count
32 }
33 }
34 };
35
36 proc_macro::TokenStream::from(output)
37}