3个版本
0.1.2 | 2024年5月28日 |
---|---|
0.1.1 | 2024年5月7日 |
0.1.0 | 2024年2月1日 |
#2076 in 过程宏
每月下载 119次
在 6 个crate中使用 (via from-attr)
31KB
698 行
from-attr
此crate提供了一些用于从属性解析值的 derive 宏。
灵感来源
此crate受到了 attribute-derive 的启发。
示例
use from_attr::FromAttr;
use syn::{parse_quote, Expr, LitStr, Type};
#[derive(FromAttr)]
#[attribute(idents = [test])]
struct Test {
a: LitStr,
b: Option<String>,
c: Type,
d: Expr,
e: Vec<Type>,
f: bool,
g: bool,
}
let attrs = [
parse_quote!(#[test(a = "a", b = "b", c = (), d = if true { "a" } else { "b" }, e = [(), Debug], f)]),
];
let test = Test::from_attributes(&attrs).unwrap().unwrap().value;
assert_eq!(test.a.value(), "a");
assert_eq!(test.b.unwrap(), "b");
assert!(matches!(test.c, Type::Tuple(_)));
assert!(matches!(test.d, Expr::If(_)));
assert!(test.e.len() == 2);
assert!(test.f);
assert!(!test.g);
更多示例可以在 示例目录 中找到。
依赖项
~0.3–0.8MB
~19K SLoC