use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub enum EscalationLevel {
None,
Light,
Medium,
Heavy,
}
impl EscalationLevel {
#[must_use]
pub fn needs_evasion(self) -> bool {
!matches!(self, Self::None)
}
#[must_use]
pub fn use_grammar(self) -> bool {
matches!(self, Self::Medium | Self::Heavy)
}
#[must_use]
pub fn use_content_type(self) -> bool {
matches!(self, Self::Medium | Self::Heavy)
}
#[must_use]
pub fn use_advanced(self) -> bool {
matches!(self, Self::Heavy)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn none_needs_no_evasion() {
assert!(!EscalationLevel::None.needs_evasion());
}
#[test]
fn light_needs_evasion() {
assert!(EscalationLevel::Light.needs_evasion());
}
#[test]
fn grammar_at_medium_and_heavy() {
assert!(!EscalationLevel::None.use_grammar());
assert!(!EscalationLevel::Light.use_grammar());
assert!(EscalationLevel::Medium.use_grammar());
assert!(EscalationLevel::Heavy.use_grammar());
}
#[test]
fn advanced_at_heavy_only() {
assert!(!EscalationLevel::Medium.use_advanced());
assert!(EscalationLevel::Heavy.use_advanced());
}
}