use std::io::{self, Write};
use termina::{PlatformTerminal, Terminal as _};
use super::KohBackend;
pub struct TerminaBackend {
term: PlatformTerminal,
}
impl TerminaBackend {
pub fn new() -> io::Result<Self> {
Ok(Self {
term: PlatformTerminal::new()?,
})
}
}
impl KohBackend for TerminaBackend {
fn write_bytes(&mut self, bytes: &[u8]) -> io::Result<()> {
self.term.write_all(bytes)
}
fn flush(&mut self) -> io::Result<()> {
Write::flush(&mut self.term)
}
fn enter_raw_mode(&mut self) -> io::Result<()> {
self.term.enter_raw_mode()
}
fn leave_raw_mode(&mut self) -> io::Result<()> {
self.term.enter_cooked_mode()
}
fn size(&self) -> io::Result<(u16, u16)> {
let d = self.term.get_dimensions()?;
Ok((d.rows, d.cols))
}
}