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}