webidl_utils/symbol/
with_optional_identifier.rs1use weedle::interface::OperationInterfaceMember;
2use weedle::mixin::OperationMixinMember;
3use weedle::namespace::OperationNamespaceMember;
4
5pub trait SymbolWithOptionalIdentifier<'a> {
7 fn identifier(&self) -> Option<weedle::common::Identifier<'a>>;
8 fn has_identifier(&self) -> bool;
9}
10
11macro_rules! impl_symbol_with_optional_identifier {
12 ($($sym:ident),+ $(,)?) => {
13 $(
14 impl<'a> SymbolWithOptionalIdentifier<'a> for $sym<'a> {
15 fn identifier(&self) -> Option<weedle::common::Identifier<'a>> {
16 self.identifier
17 }
18
19 fn has_identifier(&self) -> bool {
20 self.identifier.is_some()
21 }
22 }
23 )+
24 };
25}
26
27impl_symbol_with_optional_identifier!(
28 OperationInterfaceMember,
29 OperationMixinMember,
30 OperationNamespaceMember,
31);
32
33#[cfg(test)]
34mod tests {
35 use crate::symbol::SymbolWithOptionalIdentifier;
36 use weedle::common::Identifier;
37 use weedle::interface::OperationInterfaceMember;
38 use weedle::Parse;
39
40 #[test]
41 fn test_operation_interface_member() {
42 let (_, output) = OperationInterfaceMember::parse(
43 "static Promise<boolean> isTypeSupported(DOMString type);",
44 )
45 .expect("OperationInterfaceMember parsed with an error");
46
47 assert_eq!(output.identifier(), Some(Identifier("isTypeSupported")));
48 assert!(output.has_identifier());
49 }
50}