tracing_config_macros/
lib.rs1#![forbid(unsafe_code)]
2#![warn(missing_docs)]
3#![warn(rustdoc::private_intra_doc_links)]
4#![doc = include_str!("../README.md")]
5
6use proc_macro::TokenStream;
7use quote::quote;
8use syn::{parse_macro_input, ItemFn};
9
10#[proc_macro_attribute]
12pub fn test(_attr: TokenStream, item: TokenStream) -> TokenStream {
13 let mut org_fn = parse_macro_input!(item as ItemFn);
15
16 let org_fn_ident: syn::Ident = org_fn.sig.ident.clone();
18 let org_fn_ident_string = org_fn_ident.to_string();
19 let org_fn_ident_span = org_fn_ident.span().clone();
20 org_fn.sig.ident = syn::Ident::new(
21 format!("{org_fn_ident_string}_private").as_ref(),
22 org_fn_ident_span,
23 );
24 let private_fn = &org_fn.sig.ident;
25
26 let expanded = quote! {
28 fn #org_fn_ident() {
29 tracing_config::init!();
30 #org_fn;
31 #private_fn()
32 }
33 };
34
35 TokenStream::from(expanded)
37}