| use std::collections::HashMap; |
| |
| use darling::FromMeta; |
| use syn::{parse_quote, Attribute, Path}; |
| |
| #[derive(Debug, FromMeta, PartialEq, Eq)] |
| struct MapValue { |
| name: String, |
| #[darling(default)] |
| option: bool, |
| } |
| |
| #[test] |
| fn parse_map() { |
| let attr: Attribute = parse_quote! { |
| #[foo(first(name = "Hello", option), the::second(name = "Second"))] |
| }; |
| |
| let meta = attr.meta; |
| let map: HashMap<Path, MapValue> = FromMeta::from_meta(&meta).unwrap(); |
| |
| let comparison: HashMap<Path, MapValue> = vec![ |
| ( |
| parse_quote!(first), |
| MapValue { |
| name: "Hello".into(), |
| option: true, |
| }, |
| ), |
| ( |
| parse_quote!(the::second), |
| MapValue { |
| name: "Second".into(), |
| option: false, |
| }, |
| ), |
| ] |
| .into_iter() |
| .collect(); |
| |
| assert_eq!(comparison, map); |
| } |