#[non_exhaustive]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ShrinkScope {
CoreComponent,
CoreEvent,
CanonicalVerb,
ShellVerb,
ShellScoped,
DebugTest,
}
impl ShrinkScope {
pub fn of(type_code: u32) -> Option<Self> {
use arkhe_forge_core::typecode::*;
match type_code {
c if (CORE_COMPONENT.0..=CORE_COMPONENT.1).contains(&c) => Some(Self::CoreComponent),
c if (CORE_EVENT.0..=CORE_EVENT.1).contains(&c) => Some(Self::CoreEvent),
c if (CORE_VERB_CANONICAL.0..=CORE_VERB_CANONICAL.1).contains(&c) => {
Some(Self::CanonicalVerb)
}
c if (SHELL_VERB.0..=SHELL_VERB.1).contains(&c) => Some(Self::ShellVerb),
c if (SHELL_SCOPED.0..=SHELL_SCOPED.1).contains(&c) => Some(Self::ShellScoped),
c if (DEBUG_TEST.0..=DEBUG_TEST.1).contains(&c) => Some(Self::DebugTest),
_ => None,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn classify_core_component() {
assert_eq!(
ShrinkScope::of(0x0003_0001),
Some(ShrinkScope::CoreComponent)
);
}
#[test]
fn classify_core_event() {
assert_eq!(ShrinkScope::of(0x0003_0F01), Some(ShrinkScope::CoreEvent));
}
#[test]
fn classify_debug_test() {
assert_eq!(ShrinkScope::of(0xFFFF_FFFF), Some(ShrinkScope::DebugTest));
}
}