use std::io;
pub(crate) trait RawModeCleanup {
fn restore_raw_mode(&mut self) -> io::Result<()>;
}
pub(crate) struct RawModeGuard {
active: bool,
}
impl RawModeGuard {
pub(crate) fn enable() -> io::Result<Self> {
crossterm::terminal::enable_raw_mode()?;
Ok(Self { active: true })
}
}
impl RawModeCleanup for RawModeGuard {
fn restore_raw_mode(&mut self) -> io::Result<()> {
crossterm::terminal::disable_raw_mode()?;
self.active = false;
Ok(())
}
}
impl Drop for RawModeGuard {
fn drop(&mut self) {
if self.active {
let _ = crossterm::terminal::disable_raw_mode();
}
}
}