Skip to main content

solana_bpf_logs_tracing/
lib.rs

1extern crate proc_macro;
2use proc_macro::TokenStream;
3use quote::quote;
4use syn::{ItemFn, parse_macro_input};
5
6#[proc_macro_attribute]
7pub fn trace(_attr: TokenStream, item: TokenStream) -> TokenStream {
8    let input = parse_macro_input!(item as ItemFn);
9    let fn_name = input.sig.ident.to_string();
10    let block = input.block;
11    let sig = input.sig;
12    let vis = input.vis;
13
14    let output = quote! {
15        #vis #sig {
16            let __result = (|| #block)();
17            #[cfg(feature = "tracing")]
18            if let Err(ref __e) = __result {
19                msg!("`{}` error thrown at {}:{}", #fn_name, file!(), line!());
20            }
21            __result
22        }
23    };
24    output.into()
25}