3个版本

0.1.2 2024年5月28日
0.1.1 2024年5月7日
0.1.0 2024年2月1日

过程宏 中排名第182

Download history • Rust 包仓库 167/week @ 2024-05-06 • Rust 包仓库 38/week @ 2024-05-13 • Rust 包仓库 85/week @ 2024-05-20 • Rust 包仓库 198/week @ 2024-05-27 • Rust 包仓库 36/week @ 2024-06-03 • Rust 包仓库 55/week @ 2024-06-10 • Rust 包仓库 9/week @ 2024-06-17 • Rust 包仓库 23/week @ 2024-06-24 • Rust 包仓库 16/week @ 2024-07-08 • Rust 包仓库 48/week @ 2024-07-15 • Rust 包仓库 29/week @ 2024-07-22 • Rust 包仓库 16/week @ 2024-07-29 • Rust 包仓库 16/week @ 2024-08-05 • Rust 包仓库 6/week @ 2024-08-12 • Rust 包仓库

每月下载量71
5 个crate(2个直接) 中使用

MIT/Apache

34KB
810

from-attr

Crates.io version docs.rs docs

此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