ms_timing/
lib.rs

1use proc_macro::TokenStream;
2use quote::quote;
3use syn::{parse_macro_input, ItemFn};
4
5#[proc_macro_attribute]
6pub fn time_measure(_attr: TokenStream, item: TokenStream) -> TokenStream {
7    let input = parse_macro_input!(item as ItemFn);
8    let fn_sig = &input.sig;      // 函数签名(如 `fn foo()`)
9    let fn_name = &input.sig.ident; // 函数名(如 `foo`)
10    let fn_block = &input.block;   // 函数体
11
12    quote! {
13        #fn_sig {
14            let start = std::time::Instant::now();
15            #fn_block
16            let duration = start.elapsed();
17            println!(
18                "Function `{}` took {:?}",
19                stringify!(#fn_name),  // 打印函数名
20                duration
21            );
22        }
23    }.into()
24}