#[derive(Debug, Clone, PartialEq, Eq)]
pub enum NotificationEvent {
SectionEntering { section_name: String },
LoopArmed,
BreakRequested,
LoopExited,
}
impl NotificationEvent {
pub fn override_key(&self) -> String {
match self {
NotificationEvent::SectionEntering { section_name } => {
format!("section:{}", section_name)
}
NotificationEvent::LoopArmed => "loop_armed".to_string(),
NotificationEvent::BreakRequested => "break_requested".to_string(),
NotificationEvent::LoopExited => "loop_exited".to_string(),
}
}
pub fn fallback_key(&self) -> &'static str {
match self {
NotificationEvent::SectionEntering { .. } => "section_entering",
NotificationEvent::LoopArmed => "loop_armed",
NotificationEvent::BreakRequested => "break_requested",
NotificationEvent::LoopExited => "loop_exited",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn override_key_section_entering() {
let event = NotificationEvent::SectionEntering {
section_name: "verse".to_string(),
};
assert_eq!(event.override_key(), "section:verse");
assert_eq!(event.fallback_key(), "section_entering");
}
#[test]
fn override_key_fixed_events() {
assert_eq!(NotificationEvent::LoopArmed.override_key(), "loop_armed");
assert_eq!(
NotificationEvent::BreakRequested.override_key(),
"break_requested"
);
assert_eq!(NotificationEvent::LoopExited.override_key(), "loop_exited");
}
#[test]
fn fallback_key_matches_override_for_fixed_events() {
assert_eq!(
NotificationEvent::LoopArmed.override_key(),
NotificationEvent::LoopArmed.fallback_key()
);
assert_eq!(
NotificationEvent::BreakRequested.override_key(),
NotificationEvent::BreakRequested.fallback_key()
);
assert_eq!(
NotificationEvent::LoopExited.override_key(),
NotificationEvent::LoopExited.fallback_key()
);
}
}