mg_settings_macros/
lib.rs1#![recursion_limit="128"]
23
24extern crate env_logger;
25#[macro_use]
26extern crate log;
27extern crate proc_macro;
28#[macro_use]
29extern crate quote;
30extern crate syn;
31
32mod attributes;
33mod commands;
34mod settings;
35mod string;
36
37use std::env;
38use std::io::Write;
39
40use env_logger::Builder;
41use proc_macro::TokenStream;
42
43use commands::expand_commands_enum;
44use settings::{expand_setting_enum, expand_settings_enum};
45
46fn init_logger() {
47 let mut builder = Builder::new();
48 builder.format(|buf, record| {
49 writeln!(buf, "{}", record.args())
50 });
51 if let Ok(rust_log) = env::var("RUST_LOG") {
52 builder.parse(&rust_log);
53 }
54 builder.try_init();
55}
56
57#[proc_macro_derive(Commands, attributes(completion, count, help, special_command))]
58pub fn commands(input: TokenStream) -> TokenStream {
60 init_logger();
61 let ast = syn::parse(input).unwrap();
62 let expanded = expand_commands_enum(ast);
63 warn!("{}", expanded.to_string());
64 expanded.into()
65}
66
67#[proc_macro_derive(Setting, attributes(default))]
68pub fn setting(input: TokenStream) -> TokenStream {
70 init_logger();
71 let ast = syn::parse(input).unwrap();
72 let expanded = expand_setting_enum(ast);
73 warn!("{}", expanded.to_string());
74 expanded.into()
75}
76
77#[proc_macro_derive(Settings, attributes(help))]
78pub fn settings(input: TokenStream) -> TokenStream {
80 init_logger();
81 let ast = syn::parse(input).unwrap();
82 let expanded = expand_settings_enum(ast);
83 warn!("{}", expanded.to_string());
84 expanded.into()
85}