You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gobang/src/main.rs

67 lines
1.5 KiB
Rust

mod app;
mod components;
mod event;
mod handlers;
mod ui;
mod user_config;
mod utils;
#[macro_use]
mod log;
use crate::app::App;
use crate::event::{Event, Key};
use crate::handlers::handle_app;
use crossterm::{
event::{DisableMouseCapture, EnableMouseCapture},
execute,
terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
};
use std::io::stdout;
use tui::{backend::CrosstermBackend, Terminal};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
enable_raw_mode()?;
outln!("gobang logger");
let user_config = user_config::UserConfig::new("sample.toml").ok();
let mut stdout = stdout();
execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?;
let backend = CrosstermBackend::new(stdout);
let mut terminal = Terminal::new(backend)?;
let events = event::Events::new(250);
let mut app = App::new(user_config.unwrap());
terminal.clear()?;
loop {
terminal.draw(|f| app.draw(f).unwrap())?;
match events.next()? {
Event::Input(key) => {
if key == Key::Char('q') {
break;
};
match handle_app(key, &mut app).await {
Ok(_) => (),
Err(err) => app.error = Some(err.to_string()),
}
}
Event::Tick => (),
}
}
disable_raw_mode()?;
execute!(
terminal.backend_mut(),
LeaveAlternateScreen,
DisableMouseCapture
)?;
terminal.show_cursor()?;
Ok(())
}