Skip to main content

float_pigment_forest_macro/
lib.rs

1use 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}