5个不稳定版本
新版本 0.3.4 | 2024年8月19日 |
---|---|
0.2.2 | 2024年7月24日 |
0.2.1 | 2024年7月23日 |
0.2.0 | 2024年5月6日 |
0.1.0 | 2024年5月6日 |
#167 in 进程宏
每月下载量 397
25KB
698 行
derive-attr
以函数式方式解析属性进程宏。每个元组使用的长度最多为20。
示例
fn main() {
let attr: Attribute = parse_quote! {
#[my_attr(
"hello",
"world",
122,
conf1 = 114 + 514,
key_value = SomeType<A, B>,
path_only,
nested(tea(green_tea)))
]
};
let parser = ParseArgs::new()
.args::<(LitStr, LitStr)>()
.opt_args::<(Lit, Lit)>()
.rest_args::<Vec<Lit>>()
.meta((
("path_only", path_only()),
("key_value", key_value::<Type>()),
("kv_optional", key_value::<Expr>()).optional(),
conflicts((
("conf1", path_only()).value("conf1"),
("conf1", key_value::<Expr>()).value("conf1_expr"),
("conf2", key_value::<Expr>()).value("conf2"),
)),
(
"nested",
meta_list((
("milk", path_only()),
(
"tea",
meta_list(conflicts((
("red_tea", path_only()).value("red_tea"),
("green_tea", path_only()).value("green_tea"),
))),
),
)),
),
));
let ParseArgs {
args: (_, _), // ("hello", "world")
opt_args: (Some(_), None), // (Some(112), None)
rest_args: _, // []
meta:
(
true,
_, // SomeType<A, B>
None,
"conf1_expr",
(false, "green_tea"),
),
} = parser.parse_attrs(&attr).unwrap()
else {
unreachable!()
};
}
依赖关系
~265–710KB
~17K SLoC