This crates provides helper APIs for procedural macros.
Please read the API documentation on docs.rs
```rust use proc_macro2::Span; use syn::LitStr;
fn litstr(s: &str) -> Lit { Lit::Str(LitStr::new(s, Span::callsite())) }
fn testcontainsattributeimpl() { let attr: Attribute = parsequote!(#[level0(level1, level11(level2, level21 = "hello"))]); let attr = [attr];
assert!(!contains_attribute(&attr, &[]));
assert!(!contains_attribute(&attr, &["not"]));
assert!(!contains_attribute(&attr, &["level0"]));
assert!(contains_attribute(&attr, &["level0", "level1"]));
assert!(!contains_attribute(&attr, &["level0", "level1_1"]),);
assert!(contains_attribute(&attr, &["level0", "level1_1", "level2"]),);
assert!(!contains_attribute(
&attr,
&["level0", "level1_1", "level2_1"]
),);
}
fn testgetattributevalue() { let attr: Attribute = parsequote!(#[level0(level1 = "hi", level1_1(level2 = "bye"))]); let attr = [attr];
assert_eq!(get_attribute_value(&attr, &[""]), None);
assert_eq!(get_attribute_value(&attr, &["not"]), None);
assert_eq!(get_attribute_value(&attr, &["level0"]), None);
assert_eq!(
get_attribute_value(&attr, &["level0", "level1"]),
Some(lit_str("hi"))
);
assert_eq!(get_attribute_value(&attr, &["level0", "level1_1"]), None);
assert_eq!(
get_attribute_value(&attr, &["level0", "level1_1", "level2"]),
Some(lit_str("bye"))
);
}
fn testgetattributemap() { asserteq!( getattributemap( &[ parsequote!(#[level9]), parsequote!(#[level0(level8)]), parsequote!(#[level0(level1 = "hi", level11(level2 = "bye"))]), parsequote!(#[level0(level1 = "hi", level11(level2 = "bye"))]), parsequote!(#[gen0(gen1 = "amoeba", gen11 = "monad", gen12(gen2 = "monoid"))]) ], "." ), vec![ ("level9".tostring(), vec![]), ("level0.level8".tostring(), vec![]), ( "level0.level1".tostring(), vec![litstr("hi"), litstr("hi")], ), ( "level0.level11.level2".tostring(), vec![litstr("bye"), litstr("bye")], ), ("gen0.gen1".tostring(), vec![litstr("amoeba")]), ("gen0.gen11".tostring(), vec![litstr("monad")]), ("gen0.gen12.gen2".tostring(), vec![litstr("monoid")]), ] .into_iter() .collect() ); } ```