siranga/src/input.rs
2025-04-13 02:03:43 +02:00

35 lines
775 B
Rust

use tracing::trace;
#[derive(Debug)]
pub enum Input {
Char(char),
Up,
Down,
Delete,
Esc,
Enter,
Backspace,
CtrlP,
Other,
}
impl From<&[u8]> for Input {
fn from(value: &[u8]) -> Self {
match value {
[c] if c.is_ascii_graphic() => Input::Char(*c as char),
[27] => Input::Esc,
[27, 91, 65] => Input::Up,
[27, 91, 66] => Input::Down,
[27, 91, 51, 126] => Input::Delete,
[13] => Input::Enter,
// NOTE: Actual char is DLE, this happens to map to ctrl-p
[16] => Input::CtrlP,
[127] => Input::Backspace,
other => {
trace!("{other:?}");
Input::Other
}
}
}
}