//! #[clause_param]属性宏实现 use proc_macro::TokenStream; use quote::quote; use syn::{parse_macro_input, Item, AttributeArgs, Meta, NestedMeta, Lit}; /// 实现#[clause_param]属性宏 pub fn clause_param_impl(attr: TokenStream, item: TokenStream) -> TokenStream { // 解析属性参数 let args = parse_macro_input!(attr as AttributeArgs); let input = parse_macro_input!(item as Item); let mut clause = None; let mut description = None; for arg in args { if let NestedMeta::Meta(Meta::NameValue(nv)) = arg { let path_str = nv.path.get_ident().map(|i| i.to_string()); match path_str.as_deref() { Some("clause") => { if let Lit::Str(lit) = &nv.lit { clause = Some(lit.value()); } } Some("description") => { if let Lit::Str(lit) = &nv.lit { description = Some(lit.value()); } } _ => {} } } } // 生成文档注释 let doc_comment = if let (Some(clause_id), Some(desc)) = (clause, description) { quote! { #[doc = concat!("Constitutional parameter from clause: ", #clause_id)] #[doc = ""] #[doc = #desc] } } else { quote! {} }; // 生成最终代码 let expanded = quote! { #doc_comment #input }; TokenStream::from(expanded) }