jealousy_derive 0.1.1

Derive macro for the jealousy crate
Documentation
use darling::FromDeriveInput;
use proc_macro::{self, TokenStream};
use quote::quote;
use syn::{parse_macro_input, DeriveInput};

#[derive(FromDeriveInput)]
#[darling(attributes(from_env), forward_attrs(allow, doc, cfg))]
struct Opts {
    prefix: String,
}

#[proc_macro_derive(FromEnv, attributes(from_env))]
pub fn derive(input: TokenStream) -> TokenStream {
    let input = parse_macro_input!(input);
    let opts = Opts::from_derive_input(&input).expect("Wrong options");
    let DeriveInput { ident, .. } = input;

    let prefix = &opts.prefix;
    let out = quote! {
        impl FromEnv for #ident {
            const PREFIX: &'static str = #prefix;
        }
    };

    out.into()
}