rush_sync_server/ui/
terminal.rs1use crate::core::constants::APP_TITLE;
2use crate::core::prelude::*;
3use crossterm::{
4 cursor, execute,
5 style::ResetColor,
6 terminal::{
7 self, disable_raw_mode, enable_raw_mode, ClearType, EnterAlternateScreen,
8 LeaveAlternateScreen,
9 },
10};
11use std::io::Stdout;
12
13pub struct TerminalManager {
14 stdout: Stdout,
15}
16
17impl TerminalManager {
18 pub async fn new() -> Result<Self> {
19 let stdout = io::stdout();
20 Ok(Self { stdout })
21 }
22
23 pub async fn setup(&mut self) -> Result<()> {
24 enable_raw_mode()?;
25
26 execute!(
27 self.stdout,
28 terminal::Clear(ClearType::All),
29 EnterAlternateScreen,
30 terminal::DisableLineWrap,
31 terminal::SetTitle(APP_TITLE),
32 cursor::Hide
33 )?;
34
35 Ok(())
36 }
37
38 pub async fn cleanup(&mut self) -> Result<()> {
39 disable_raw_mode()?;
41
42 execute!(
44 self.stdout,
45 terminal::Clear(ClearType::All), LeaveAlternateScreen,
47 terminal::EnableLineWrap,
48 cursor::Show,
49 ResetColor,
50 cursor::MoveTo(0, 0)
51 )?;
52
53 self.stdout.flush()?;
55
56 Ok(())
57 }
58}