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