use crate::terminal_lib_backends::{InputEvent, Key, KeyPress, SpecialKey};
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DialogEvent {
EnterPressed,
EscPressed,
None,
}
mod dialog_event_impl {
use super::*;
impl DialogEvent {
pub fn from(input_event: InputEvent) -> Self {
if let InputEvent::Keyboard(keypress) = input_event {
match keypress {
KeyPress::Plain {
key: Key::SpecialKey(SpecialKey::Enter),
} => {
return Self::EnterPressed;
}
KeyPress::Plain {
key: Key::SpecialKey(SpecialKey::Esc),
} => {
return Self::EscPressed;
}
_ => {}
}
}
Self::None
}
}
}
#[cfg(test)]
mod test_dialog_event {
use super::*;
use crate::{assert_eq2, key_press};
#[test]
fn dialog_event_handles_enter() {
let input_event = InputEvent::Keyboard(key_press!(@special SpecialKey::Enter));
let dialog_event = DialogEvent::from(input_event);
assert_eq2!(dialog_event, DialogEvent::EnterPressed);
}
#[test]
fn dialog_event_handles_esc() {
let input_event = InputEvent::Keyboard(key_press!(@special SpecialKey::Esc));
let dialog_event = DialogEvent::from(input_event);
assert_eq2!(dialog_event, DialogEvent::EscPressed);
}
}