1mod ast;
2mod utils;
3mod codegen;
4
5#[proc_macro_derive(FromEnv, attributes(env))]
6pub fn env_derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
7 let input = syn::parse_macro_input!(input as syn::DeriveInput);
8 let input: ast::DeriveInput = match darling::FromDeriveInput::from_derive_input(&input) {
9 Ok(parsed) => parsed,
10 Err(err) => {
11 return err.write_errors().into();
12 }
13 };
14
15 let root = input
16 .root
17 .as_ref()
18 .map(|path| quote::quote!(#path))
19 .unwrap_or(quote::quote! {
20 ::ground_env
21 });
22
23 codegen::expand(root, input).into()
24}