#[cfg(feature = "crossterm")]
mod crossterm;
#[cfg(feature = "termion")]
mod termion;
#[cfg(feature = "termwiz")]
mod termwiz;
mod test;
#[cfg(feature = "crossterm")]
pub use crossterm::CrosstermTerminalAdapter;
use ratatui::{CompletedFrame, Frame, Terminal};
#[cfg(feature = "termion")]
pub use termion::TermionTerminalAdapter;
#[cfg(feature = "termwiz")]
pub use termwiz::TermwizTerminalAdapter;
pub use test::TestTerminalAdapter;
use super::{TerminalError, TerminalResult};
pub trait TerminalAdapter {
type Backend: ratatui::backend::Backend + 'static;
fn draw<F>(&mut self, render_callback: F) -> TerminalResult<CompletedFrame<'_>>
where
F: FnOnce(&mut Frame<'_>),
{
self.raw_mut()
.draw(render_callback)
.map_err(|_| TerminalError::CannotDrawFrame)
}
fn clear_screen(&mut self) -> TerminalResult<()> {
self.raw_mut()
.clear()
.map_err(|_| TerminalError::CannotClear)
}
fn enable_raw_mode(&mut self) -> TerminalResult<()>;
fn disable_raw_mode(&mut self) -> TerminalResult<()>;
fn enter_alternate_screen(&mut self) -> TerminalResult<()>;
fn leave_alternate_screen(&mut self) -> TerminalResult<()>;
fn enable_mouse_capture(&mut self) -> TerminalResult<()>;
fn disable_mouse_capture(&mut self) -> TerminalResult<()>;
fn raw_mut(&mut self) -> &mut Terminal<Self::Backend>;
fn raw(&self) -> &Terminal<Self::Backend>;
}