4 releases

new 0.1.3 Oct 12, 2024
0.1.2 May 28, 2024
0.1.1 May 7, 2024
0.1.0 Feb 1, 2024

#2192 in Procedural macros

Download history 16/week @ 2024-06-26 4/week @ 2024-07-03 32/week @ 2024-07-10 38/week @ 2024-07-17 34/week @ 2024-07-24 16/week @ 2024-07-31 16/week @ 2024-08-07 9/week @ 2024-08-14 32/week @ 2024-08-21 58/week @ 2024-08-28 12/week @ 2024-09-04 26/week @ 2024-09-11 27/week @ 2024-09-18 48/week @ 2024-09-25 17/week @ 2024-10-02 223/week @ 2024-10-09

317 downloads per month
Used in 6 crates (via from-attr)

MIT/Apache

31KB
698 lines

from-attr

Crates.io version docs.rs docs

This crate provides some derive macros for parsing values from attributes.

Inspired

This crate inspired by attribute-derive.

Example

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);

More examples can be found in the examples directories.

Dependencies

~350–800KB
~18K SLoC