1个不稳定版本
0.1.0 | 2022年4月3日 |
---|
#2022 在 过程宏
每月244次 下载
用于 derive-from-ext
18KB
432 行
syn_unnamed_struct
解析并转换无名的结构体到tokens。用于属性宏参数中替代Meta属性,以允许使用更结构化的数据(嵌套对象)。
在derive宏定义中的使用
use syn_unnamed_struct::Meta;
#[proc_macro_derive(CustomMacro, attributes(customMacro))]
pub fn derive(tokens: TokenStream) -> TokenStream {
let input = parse_macro_input!(tokens);
input.attrs.map(|attr| {
let obj: Meta = attr.parse().expect("Coult not parse attribute");
//can now interact and extract the properties from the Meta enum
//...
});
}
宏使用示例
#[derive(CustomMacro)]
#[customMacro(name="something", other={ entry1: "val1", entry2: "val2" })]
struct MyStruct {
//...
}
支持的属性
- 未命名的结构体
#[customMacro({ prop1: 123, prop2: 245 })]
- 嵌套未命名的结构体
#[customMacro({ prop1: 123, prop2: { prop2a: 123, prop2b: 245 } })]
- Meta值中的未命名的结构体
#[customMacro(prop1=123, prop2={ prop2a: 123, prop2b: 245 })]
- 未命名的Meta列表
#[customMacro(prop1, prop2, (prop3a=123, prop3b=245)))]
- 嵌套未命名的Meta列表
#[customMacro(prop1=123, prop2=(prop2a=123, prop2b=245)))]
注意
- 由于与syn Meta结构体交织在一起,不能使用darling。
依赖
~1.5MB
~35K SLoC