instrumenter_proc_macro/
lib.rs1#![allow(warnings)]
2
3use proc_macro::TokenStream;
4#[cfg(feature = "enabled")]
5use proc_macro2::TokenStream as TokenStream2;
6#[cfg(feature = "enabled")]
7use quote::quote;
8#[cfg(feature = "enabled")]
9use syn::{parse_macro_input, parse_quote, ItemFn};
10
11#[proc_macro_attribute]
12pub fn track(args: TokenStream, input: TokenStream) -> TokenStream {
13 #[cfg(feature = "enabled")]
14 {
15 let mut function = parse_macro_input!(input as ItemFn);
16 let args = TokenStream2::from(args);
17
18 function
19 .attrs
20 .push(parse_quote!(#[instrumenter::private__::instrument(skip_all, #args)]));
21 function.block.stmts.insert(
22 0,
23 parse_quote!(
24 use instrumenter::private__ as tracing;
25 ),
26 );
27
28 TokenStream::from(quote! {
29 #function
30 })
31 }
32
33 #[cfg(not(feature = "enabled"))]
34 input
35}