inline_config_macros/
lib.rs

1mod config_data;
2mod config_repr;
3mod parse;
4mod path;
5mod value;
6
7fn delegate_macro<I, T>(f: fn(I) -> T, input: proc_macro::TokenStream) -> proc_macro::TokenStream
8where
9    I: syn::parse::Parse,
10    T: quote::ToTokens,
11{
12    match syn::parse(input) {
13        Ok(input) => f(input).into_token_stream().into(),
14        Err(e) => proc_macro_error::abort!(e.span(), e),
15    }
16}
17
18#[proc_macro_error::proc_macro_error]
19#[proc_macro]
20pub fn config(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
21    delegate_macro(std::convert::identity::<config_repr::ConfigItems>, input)
22}
23
24#[proc_macro_error::proc_macro_error]
25#[proc_macro]
26pub fn path(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
27    delegate_macro(path::Path::expr, input)
28}
29
30#[proc_macro_error::proc_macro_error]
31#[proc_macro]
32#[allow(non_snake_case)]
33pub fn Path(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
34    delegate_macro(path::Path::ty, input)
35}
36
37#[proc_macro_error::proc_macro_error]
38#[proc_macro_derive(ConfigData, attributes(config_data))]
39pub fn config_data(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
40    delegate_macro(config_data::config_data, input)
41}