solana_helper/
lib.rs

1extern crate proc_macro;
2
3mod codecs;
4mod default_env;
5
6use proc_macro::TokenStream;
7use quote::quote;
8use syn::parse_macro_input;
9use syn::LitStr;
10
11#[proc_macro]
12pub fn program_id_from_env(input: TokenStream) -> TokenStream {
13    let self::default_env::DefaultEnv {
14        env_var,
15        default_value,
16    } = parse_macro_input!(input as self::default_env::DefaultEnv);
17
18    let var_or_default = match std::env::var(env_var.value()) {
19        Ok(var) => quote! { #var },
20        Err(_) => quote! { #default_value },
21    };
22    let resolved = TokenStream::from(var_or_default);
23    let value: LitStr = syn::parse(resolved).unwrap();
24    let tokens: proc_macro2::TokenStream = self::codecs::parse_bs58(&value).unwrap();
25    let output = TokenStream::from(tokens);
26
27    output
28}