solana_bpf_logs_tracing/
lib.rs1extern 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}