iat/
lib.rs

1use proc_macro::TokenStream;
2use quote::quote;
3use syn::{ItemFn, parse_macro_input, parse_quote};
4
5#[proc_macro_attribute]
6pub fn captcha(_attr: TokenStream, item: TokenStream) -> TokenStream {
7  // 解析输入的 TokenStream 为一个函数项
8  let mut item_fn = parse_macro_input!(item as ItemFn);
9
10  // 使用 parse_quote! 直接解析 quote! 宏生成的 TokenStream
11  let doc_attr: syn::Attribute = parse_quote! {
12      #[doc = "@captcha"]
13  };
14
15  // 将新的属性添加到函数的所有属性的开头
16  item_fn.attrs.insert(0, doc_attr);
17
18  // 将修改后的函数项转换回 TokenStream
19  let output = quote! {
20      #item_fn
21  };
22
23  output.into()
24}