mini_config_derive/
lib.rs

1use proc_macro::TokenStream;
2
3#[proc_macro_derive(Configure)]
4pub fn arc_forge_macro(input: TokenStream) -> TokenStream {
5    let ast: syn::DeriveInput = syn::parse(input).unwrap();
6    let name = &ast.ident;
7    let gen = quote::quote! {
8
9        impl std::fmt::Display for #name {
10            fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
11                let variant_path = std::any::type_name::<Self>()
12                    .rsplit("::")
13                    .next()
14                    .unwrap();
15                let enum_name = String::from(variant_path);
16                write!(f, "{:?}::{:?}", enum_name, self)
17            }
18        }
19
20        impl #name {
21            pub fn get(&self) -> String {
22                mini_config::arc::get_string::<#name>(self.to_owned()).to_string()
23            }
24
25            pub fn val(&self) -> String {
26                mini_config::arc::get_string::<#name>(self.to_owned()).to_string()
27            }
28
29            pub fn set(&self,value:&str) -> () {
30                mini_config::arc::set::<#name>(self.to_owned(), value)
31            }
32
33            pub fn get_str(&self) -> &'static str {
34                let key = format!("{:}", self);
35                let res = mini_config::arc::get_str(&key);
36                res
37            }
38        }
39    };
40    gen.into()
41}