inline_config_macros/
lib.rs1mod 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}