#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use crossterm_utils::Result;
pub use self::input::{input, TerminalInput};
#[cfg(unix)]
pub use self::unix_input::{AsyncReader, SyncReader};
#[cfg(windows)]
pub use self::windows_input::{AsyncReader, SyncReader};
mod input;
#[cfg(unix)]
mod unix_input;
#[cfg(windows)]
mod windows_input;
trait ITerminalInput {
fn read_char(&self) -> Result<char>;
fn read_async(&self) -> AsyncReader;
fn read_until_async(&self, delimiter: u8) -> AsyncReader;
fn read_sync(&self) -> SyncReader;
fn enable_mouse_mode(&self) -> Result<()>;
fn disable_mouse_mode(&self) -> Result<()>;
}
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Debug, PartialOrd, PartialEq, Hash, Clone)]
pub enum InputEvent {
Keyboard(KeyEvent),
Mouse(MouseEvent),
Unsupported(Vec<u8>),
Unknown,
}
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Debug, PartialOrd, PartialEq, Hash, Clone, Copy)]
pub enum MouseEvent {
Press(MouseButton, u16, u16),
Release(u16, u16),
Hold(u16, u16),
Unknown,
}
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Debug, PartialOrd, PartialEq, Hash, Clone, Copy)]
pub enum MouseButton {
Left,
Right,
Middle,
WheelUp,
WheelDown,
}
#[derive(Debug, PartialOrd, PartialEq, Eq, Clone, Hash)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum KeyEvent {
Backspace,
Enter,
Left,
Right,
Up,
Down,
Home,
End,
PageUp,
PageDown,
Tab,
BackTab,
Delete,
Insert,
F(u8),
Char(char),
Alt(char),
Ctrl(char),
Null,
Esc,
CtrlUp,
CtrlDown,
CtrlRight,
CtrlLeft,
ShiftUp,
ShiftDown,
ShiftRight,
ShiftLeft,
}