use macro_input::{Def, DefaultValue, FromMeta}; use std::fmt::Debug; use syn::{parse_quote, Attribute}; #[test] fn test_string() { const FIELD: Def = Def::new("foo", "bar", true, DefaultValue::Str(None)); test_field::(parse_quote!(#[foo(bar = "baz")]), &FIELD, "baz".to_string()); } #[test] fn test_flag() { const FIELD: Def = Def::new("foo", "bar", false, DefaultValue::Flag); test_field::>(parse_quote!(#[foo(bar)]), &FIELD, Some(())); test_field::>(parse_quote!(#[foo(other)]), &FIELD, None); } #[test] fn test_optional_string() { const FIELD: Def = Def::new("foo", "bar", false, DefaultValue::Str(None)); test_field::>( parse_quote!(#[foo(bar = "baz")]), &FIELD, Some("baz".to_string()), ); test_field::>(parse_quote!(#[foo(other = "baz")]), &FIELD, None); } #[test] fn test_default_string() { const FIELD: Def = Def::new("foo", "bar", false, DefaultValue::Str(Some("baz"))); test_field::(parse_quote!(#[foo(bar = "qux")]), &FIELD, "qux".to_string()); test_field::( parse_quote!(#[foo(other = "qux")]), &FIELD, "baz".to_string(), ); } fn test_field(attr: Attribute, field: &Def, value: T) { let attrs = vec![attr]; assert_eq!(field.get_value::(&attrs).unwrap(), value); }