use super::*;
use std::io;
pub struct TerminalInput {
#[cfg(windows)]
input: WindowsInput,
#[cfg(unix)]
input: UnixInput,
}
impl TerminalInput {
pub fn new() -> TerminalInput {
#[cfg(windows)]
let input = WindowsInput::new();
#[cfg(unix)]
let input = UnixInput::new();
TerminalInput { input }
}
pub fn read_line(&self) -> io::Result<String> {
let mut rv = String::new();
io::stdin().read_line(&mut rv)?;
let len = rv.trim_right_matches(&['\r', '\n'][..]).len();
rv.truncate(len);
Ok(rv)
}
pub fn read_char(&self) -> io::Result<char> {
self.input.read_char()
}
pub fn read_async(&self) -> AsyncReader {
self.input.read_async()
}
pub fn read_until_async(&self, delimiter: u8) -> AsyncReader {
self.input.read_until_async(delimiter)
}
pub fn read_sync(&self) -> SyncReader {
self.input.read_sync()
}
pub fn enable_mouse_mode(&self) -> Result<()> {
self.input.enable_mouse_mode()
}
pub fn disable_mouse_mode(&self) -> Result<()> {
self.input.disable_mouse_mode()
}
}
pub fn input() -> TerminalInput {
TerminalInput::new()
}