1use crate::attribute::ExtendedAttributeList;
2use crate::common::{Default, Identifier};
3use crate::types::AttributedType;
4
5pub type DictionaryMembers<'a> = Vec<DictionaryMember<'a>>;
7
8ast_types! {
9 struct DictionaryMember<'a> {
11 attributes: Option<ExtendedAttributeList<'a>>,
12 required: Option<term!(required)>,
13 type_: AttributedType<'a>,
14 identifier: Identifier<'a>,
15 default: Option<Default<'a>>,
16 semi_colon: term!(;),
17 }
18}
19
20#[cfg(test)]
21mod test {
22 use super::*;
23 use crate::Parse;
24
25 test!(should_parse_dictionary_member { "required long num = 5;" =>
26 "";
27 DictionaryMember;
28 attributes.is_none();
29 required.is_some();
30 identifier.0 == "num";
31 default.is_some();
32 });
33
34 test!(should_parse_dictionary_member_with_attributed_type { "required [EnforceRange] unsigned long num = 5;" =>
35 "";
36 DictionaryMember;
37 attributes.is_none();
38 required.is_some();
39 identifier.0 == "num";
40 default.is_some();
41 type_.attributes.is_some();
42 });
43}