use rskit_errors::AppResult;
use super::Capabilities;
use crate::prompt::key::Key;
pub trait Terminal {
fn capabilities(&self) -> Capabilities;
fn read_line(&mut self) -> AppResult<Option<String>>;
fn read_key(&mut self) -> AppResult<Key>;
fn write(&mut self, text: &str) -> AppResult<()>;
fn write_line(&mut self, text: &str) -> AppResult<()>;
fn flush(&mut self) -> AppResult<()>;
fn clear_last_lines(&mut self, count: u16) -> AppResult<()>;
fn begin_interactive(&mut self) -> AppResult<()>;
fn end_interactive(&mut self) -> AppResult<()>;
}
impl Terminal for Box<dyn Terminal> {
fn capabilities(&self) -> Capabilities {
(**self).capabilities()
}
fn read_line(&mut self) -> AppResult<Option<String>> {
(**self).read_line()
}
fn read_key(&mut self) -> AppResult<Key> {
(**self).read_key()
}
fn write(&mut self, text: &str) -> AppResult<()> {
(**self).write(text)
}
fn write_line(&mut self, text: &str) -> AppResult<()> {
(**self).write_line(text)
}
fn flush(&mut self) -> AppResult<()> {
(**self).flush()
}
fn clear_last_lines(&mut self, count: u16) -> AppResult<()> {
(**self).clear_last_lines(count)
}
fn begin_interactive(&mut self) -> AppResult<()> {
(**self).begin_interactive()
}
fn end_interactive(&mut self) -> AppResult<()> {
(**self).end_interactive()
}
}