ground_env_derive/
lib.rs

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}