Skip to main content

diode_base_macros/
lib.rs

1use proc_macro::TokenStream;
2use quote::quote;
3use syn::{ItemStruct, LitStr, parse_macro_input};
4
5#[proc_macro_attribute]
6pub fn config_section(args: TokenStream, input: TokenStream) -> TokenStream {
7    let key_arg = parse_macro_input!(args as LitStr);
8    let input_struct = parse_macro_input!(input as ItemStruct);
9
10    let struct_name = &input_struct.ident;
11    let key = key_arg.value();
12
13    let expanded = quote! {
14        #input_struct
15
16        impl diode_base::ConfigSection for #struct_name {
17            fn key() -> &'static str {
18                #key
19            }
20        }
21    };
22
23    TokenStream::from(expanded)
24}