inline_config_macros/
lib.rs

1mod config_data;
2mod config_repr;
3mod format;
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#[cfg(feature = "json")]
19#[proc_macro_error::proc_macro_error]
20#[proc_macro]
21pub fn json_config(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
22    delegate_macro(
23        std::convert::identity::<config_repr::ConfigBlock<format::json::JsonFormat>>,
24        input,
25    )
26}
27
28#[cfg(feature = "yaml")]
29#[proc_macro_error::proc_macro_error]
30#[proc_macro]
31pub fn yaml_config(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
32    delegate_macro(
33        std::convert::identity::<config_repr::ConfigBlock<format::yaml::YamlFormat>>,
34        input,
35    )
36}
37
38#[cfg(feature = "toml")]
39#[proc_macro_error::proc_macro_error]
40#[proc_macro]
41pub fn toml_config(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
42    delegate_macro(
43        std::convert::identity::<config_repr::ConfigBlock<format::toml::TomlFormat>>,
44        input,
45    )
46}
47
48#[proc_macro_error::proc_macro_error]
49#[proc_macro]
50pub fn path(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
51    delegate_macro(path::Path::expr, input)
52}
53
54#[proc_macro_error::proc_macro_error]
55#[proc_macro]
56#[allow(non_snake_case)]
57pub fn Path(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
58    delegate_macro(path::Path::ty, input)
59}
60
61#[proc_macro_error::proc_macro_error]
62#[proc_macro_derive(ConfigData, attributes(config_data))]
63pub fn config_data(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
64    delegate_macro(config_data::config_data, input)
65}