9 releases

0.3.0 Feb 3, 2024
0.2.0 Mar 21, 2023
0.1.6 Mar 18, 2023
0.1.5 May 5, 2022
0.1.0 Mar 28, 2021

#5 in #parse-attributes

Download history 56783/week @ 2024-07-04 69872/week @ 2024-07-11 69048/week @ 2024-07-18 62955/week @ 2024-07-25 68624/week @ 2024-08-01 69599/week @ 2024-08-08 75303/week @ 2024-08-15 67849/week @ 2024-08-22 80620/week @ 2024-08-29 81773/week @ 2024-09-05 67397/week @ 2024-09-12 68166/week @ 2024-09-19 82246/week @ 2024-09-26 74479/week @ 2024-10-03 72241/week @ 2024-10-10 78163/week @ 2024-10-17

321,277 downloads per month
Used in 374 crates (via structmeta)

MIT/Apache

58KB
1.5K SLoC

StructMeta

Crates.io Docs.rs Actions Status

Parse Rust's attribute arguments by defining a struct.

Documentation

See #[derive(StructMeta)] documentation for details.

Install

Add this to your Cargo.toml:

[dependencies]
structmeta = "0.3.0"
proc-macro2 = "1.0.78"
syn = "2.0.48"
quote = "1.0.35"

Example

use structmeta::StructMeta;
use syn::{parse_quote, Attribute, LitInt, LitStr};

#[derive(StructMeta, Debug)]
struct MyAttr {
    x: LitInt,
    y: LitStr,
}
let attr: Attribute = parse_quote!(#[my_attr(x = 10, y = "abc")]);
let attr: MyAttr = attr.parse_args().unwrap();
println!("x = {}, y = {}", attr.x, attr.y.value());

This code outputs:

x = 10, y = abc

License

This project is dual licensed under Apache-2.0/MIT. See the two LICENSE-* files for details.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~260–710KB
~17K SLoC