我正在尝试创建一个在结构上使用的宏,在该宏中,您将另一个结构作为参数,然后连接结构字段。这是宏的代码
#[proc_macro_attribute]
pub fn cat(args: proc_macro::TokenStream, input: proc_macro::TokenStream) -> proc_macro:: TokenStream {
let mut base_struct = parse_macro_input!(input as ItemStruct);
let mut new_fields_struct = parse_macro_input!(args as ItemStruct);
if let syn::Fields::Named(ref mut base_fields) = base_struct.fields {
if let syn::Fields::Named(ref mut new_fields) = new_fields_struct.fields {
for field in new_fields.named.iter() {
base_fields.push(field.clone());
}
}
}
return quote! {
#base_struct
}.into();
}
这是我希望使用它的基本示例
struct new_fields{
field: usize,
}
#[cat(new_fields)]
struct base_struct{
base_field, usize,
}
但是,它只会将单词“new_fields”转换为 TokenStream,然后编译失败,因为它不是结构。有没有办法将结构作为参数“传递”给宏,而无需在宏用法中编写代码?