diode-base-macros 0.1.0

Macros for the diode-base library
Documentation
use proc_macro::TokenStream;
use quote::quote;
use syn::{ItemStruct, LitStr, parse_macro_input};

#[proc_macro_attribute]
pub fn config_section(args: TokenStream, input: TokenStream) -> TokenStream {
    let key_arg = parse_macro_input!(args as LitStr);
    let input_struct = parse_macro_input!(input as ItemStruct);

    let struct_name = &input_struct.ident;
    let key = key_arg.value();

    let expanded = quote! {
        #input_struct

        impl diode_base::ConfigSection for #struct_name {
            fn key() -> &'static str {
                #key
            }
        }
    };

    TokenStream::from(expanded)
}