#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(u32)]
pub enum DefinitionKind {
None = 0,
All = 1,
Attribute = 2,
Constant = 3,
Exception = 4,
Interface = 5,
Module = 6,
Operation = 7,
Typedef = 8,
Alias = 9,
Struct = 10,
Union = 11,
Enum = 12,
Primitive = 13,
String = 14,
Sequence = 15,
Array = 16,
Repository = 17,
WString = 18,
Fixed = 19,
Value = 20,
ValueBox = 21,
ValueMember = 22,
Native = 23,
AbstractInterface = 24,
LocalInterface = 25,
}
impl DefinitionKind {
#[must_use]
pub const fn as_u32(self) -> u32 {
self as u32
}
}
#[cfg(test)]
#[allow(clippy::expect_used, clippy::unwrap_used, clippy::panic)]
mod tests {
use super::*;
#[test]
fn well_known_definition_kinds_match_spec() {
assert_eq!(DefinitionKind::None.as_u32(), 0);
assert_eq!(DefinitionKind::Module.as_u32(), 6);
assert_eq!(DefinitionKind::Interface.as_u32(), 5);
assert_eq!(DefinitionKind::ValueBox.as_u32(), 21);
assert_eq!(DefinitionKind::AbstractInterface.as_u32(), 24);
assert_eq!(DefinitionKind::LocalInterface.as_u32(), 25);
}
#[test]
fn at_least_26_kinds_modeled() {
let all = [
DefinitionKind::None,
DefinitionKind::All,
DefinitionKind::Attribute,
DefinitionKind::Constant,
DefinitionKind::Exception,
DefinitionKind::Interface,
DefinitionKind::Module,
DefinitionKind::Operation,
DefinitionKind::Typedef,
DefinitionKind::Alias,
DefinitionKind::Struct,
DefinitionKind::Union,
DefinitionKind::Enum,
DefinitionKind::Primitive,
DefinitionKind::String,
DefinitionKind::Sequence,
DefinitionKind::Array,
DefinitionKind::Repository,
DefinitionKind::WString,
DefinitionKind::Fixed,
DefinitionKind::Value,
DefinitionKind::ValueBox,
DefinitionKind::ValueMember,
DefinitionKind::Native,
DefinitionKind::AbstractInterface,
DefinitionKind::LocalInterface,
];
assert_eq!(all.len(), 26);
}
}