1#![crate_type = "proc-macro"]
11
12extern crate proc_macro;
13extern crate quote;
14extern crate syn;
15
16pub(crate) mod ast;
17#[allow(dead_code)]
18pub(crate) mod attrs;
19pub(crate) mod impls;
20pub(crate) mod utils;
21
22use proc_macro::TokenStream;
23use syn::{DeriveInput, parse_macro_input};
24
25#[proc_macro_derive(Configuration, attributes(config))]
29pub fn configuration(input: TokenStream) -> TokenStream {
30 let input = parse_macro_input!(input as DeriveInput);
32
33 let res = impls::impl_config(&input);
34
35 res.into()
37}
38
39#[proc_macro_derive(Keyed, attributes(keys))]
41pub fn keyed(input: TokenStream) -> TokenStream {
42 let input = parse_macro_input!(input as DeriveInput);
44
45 let res = impls::impl_keys(&input);
46
47 res.into()
49}