use std::io::{self, Write};
use qwertty::Terminal;
use super::KohBackend;
pub struct QwerttyBackend {
out: io::BufWriter<Terminal>,
}
impl QwerttyBackend {
pub fn new() -> io::Result<Self> {
Ok(Self {
out: io::BufWriter::new(Terminal::open().map_err(io::Error::other)?),
})
}
}
impl KohBackend for QwerttyBackend {
fn write_bytes(&mut self, bytes: &[u8]) -> io::Result<()> {
self.out.write_all(bytes)
}
fn flush(&mut self) -> io::Result<()> {
self.out.flush()
}
fn enter_raw_mode(&mut self) -> io::Result<()> {
self.out.get_ref().set_raw_mode().map_err(io::Error::other)
}
fn leave_raw_mode(&mut self) -> io::Result<()> {
self.out
.get_ref()
.set_cooked_mode()
.map_err(io::Error::other)
}
fn size(&self) -> io::Result<(u16, u16)> {
let size = self.out.get_ref().size().map_err(io::Error::other)?;
Ok((size.rows(), size.columns()))
}
}