use super::*;
use Screen;
pub struct TerminalInput<'stdout> {
terminal_input: Box<ITerminalInput + Sync + Send>,
stdout: &'stdout Arc<TerminalOutput>,
}
impl<'stdout> TerminalInput<'stdout> {
pub fn new(stdout: &'stdout Arc<TerminalOutput>) -> TerminalInput<'stdout> {
#[cfg(target_os = "windows")]
let input = Box::from(WindowsInput::new());
#[cfg(not(target_os = "windows"))]
let input = Box::from(UnixInput::new());
TerminalInput {
terminal_input: input,
stdout: stdout,
}
}
pub fn read_line(&self) -> io::Result<String> {
self.terminal_input.read_line(&self.stdout)
}
pub fn read_char(&self) -> io::Result<char> {
return self.terminal_input.read_char(&self.stdout);
}
pub fn read_async(&self) -> AsyncReader {
self.terminal_input.read_async(&self.stdout)
}
pub fn read_until_async(&self, delimiter: u8) -> AsyncReader {
self.terminal_input
.read_until_async(delimiter, &self.stdout)
}
}
pub fn input<'stdout>(stdout: &'stdout Screen) -> TerminalInput<'stdout> {
return TerminalInput::new(&stdout.stdout);
}