Build Status

Helper APIs for Rust procedural macros

This crates provides helper APIs for procedural macros. Please read the API documentation on docs.rs

APIs to manipulate with attributes

```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"]
),);

}

[test]

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

}

[test]

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() ); } ```