stellar-macros 0.4.1

Macros for Stellar contracts.
Documentation
use proc_macro::TokenStream;
use quote::quote;
use syn::{parse_macro_input, ItemFn};

use crate::parse_env_arg;

pub fn generate_pause_check(item: TokenStream, check_fn: &str) -> TokenStream {
    let input_fn = parse_macro_input!(item as ItemFn);
    let env_arg = parse_env_arg(&input_fn);

    let fn_vis = &input_fn.vis;
    let fn_sig = &input_fn.sig;
    let fn_block = &input_fn.block;
    let fn_attrs = &input_fn.attrs;

    let check_ident = syn::Ident::new(check_fn, proc_macro2::Span::call_site());
    let output = quote! {
        #(#fn_attrs)* // retain other macros
        #fn_vis #fn_sig {
            stellar_contract_utils::pausable::#check_ident(#env_arg);

            #fn_block
        }
    };

    output.into()
}