1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
extern crate proc_macro; use proc_macro::{TokenStream}; use proc_macro2::{Ident, Span}; use quote::quote; use std::collections::HashMap; #[proc_macro] pub fn dotenv_consts(_item: TokenStream) -> TokenStream { let entries = dotenv::dotenv_iter() .unwrap() .map(|kv| kv.unwrap()) .collect::<HashMap<_, _>>(); let keys = entries.keys().map(|k| Ident::new(k, Span::call_site())); let values = entries.values(); let output = quote! { #( pub const #keys: &str = #values; )* }; output.into() }