use bmux_keyboard::crossterm::crossterm_key_event_to_stroke;
use bmux_keyboard::encode::{KeyEncodingModes, encode_key_with_modes};
use crossterm::event::{Event, KeyEvent as CrosstermKeyEvent, KeyEventKind};
use super::{DecodedStroke, InputEvent};
pub(super) fn crossterm_event_to_input_event(
event: &Event,
enhanced: bool,
modes: KeyEncodingModes,
) -> Option<InputEvent> {
match event {
Event::Key(key) => key_event_to_input_event(key, enhanced, modes),
_ => None,
}
}
fn key_event_to_input_event(
key: &CrosstermKeyEvent,
enhanced: bool,
modes: KeyEncodingModes,
) -> Option<InputEvent> {
if key.kind == KeyEventKind::Release {
return None;
}
let stroke = crossterm_key_event_to_stroke(key)?;
let raw = key_event_to_bytes(key, enhanced, modes)?;
Some(InputEvent::Key(DecodedStroke { stroke, raw }))
}
fn key_event_to_bytes(
key: &CrosstermKeyEvent,
enhanced: bool,
modes: KeyEncodingModes,
) -> Option<Vec<u8>> {
let stroke = crossterm_key_event_to_stroke(key)?;
encode_key_with_modes(&stroke, enhanced, modes)
}