refactor(tui): use generic backend for running

This commit is contained in:
Orhun Parmaksız 2022-02-02 03:27:33 +03:00
parent e6d018ee44
commit 4bf1f86fc2
No known key found for this signature in database
GPG key ID: F83424824B3E4B90
2 changed files with 18 additions and 14 deletions

View file

@ -24,22 +24,14 @@ use crate::args::Args;
use crate::command::Command;
use crate::error::Result;
use crate::event::{Event, EventHandler};
use std::io::Write;
use systeroid_core::cache::Cache;
use systeroid_core::config::Config;
use systeroid_core::sysctl::controller::Sysctl;
use termion::input::MouseTerminal;
use termion::raw::IntoRawMode;
use termion::screen::AlternateScreen;
use tui::backend::TermionBackend;
use tui::backend::Backend;
use tui::terminal::Terminal;
/// Runs `systeroid-tui`.
pub fn run<Output: Write>(args: Args, output: Output) -> Result<()> {
let output = output.into_raw_mode()?;
let output = MouseTerminal::from(output);
let output = AlternateScreen::from(output);
let backend = TermionBackend::new(output);
pub fn run<B: Backend>(args: Args, backend: B) -> Result<()> {
let mut terminal = Terminal::new(backend)?;
terminal.hide_cursor()?;
terminal.clear()?;
@ -87,6 +79,7 @@ pub fn run<Output: Write>(args: Args, output: Output) -> Result<()> {
#[cfg(test)]
mod tests {
use super::*;
use tui::backend::TestBackend;
#[test]
fn test_systeroid_tui() -> Result<()> {
@ -94,7 +87,8 @@ mod tests {
tick_rate: 1000,
..Args::default()
};
run(args, &mut Vec::new())?;
let backend = TestBackend::new(40, 10);
run(args, backend)?;
Ok(())
}
}

View file

@ -2,11 +2,20 @@ use std::env;
use std::io;
use std::process;
use systeroid_tui::args::Args;
use systeroid_tui::error::Result;
use termion::input::MouseTerminal;
use termion::raw::IntoRawMode;
use termion::screen::AlternateScreen;
use tui::backend::TermionBackend;
fn main() {
fn main() -> Result<()> {
if let Some(args) = Args::parse(env::args().collect()) {
let mut stderr = io::stderr();
match systeroid_tui::run(args, &mut stderr) {
let output = io::stderr();
let output = output.into_raw_mode()?;
let output = MouseTerminal::from(output);
let output = AlternateScreen::from(output);
let backend = TermionBackend::new(output);
match systeroid_tui::run(args, backend) {
Ok(_) => process::exit(0),
Err(e) => {
eprintln!("{}", e);
@ -14,4 +23,5 @@ fn main() {
}
}
}
Ok(())
}