aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
blob: 18fb6e7660504c9407c8dc908d3304f9ac684627 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use crossterm::event::{self, Event};
use std::io;
use tui::{backend::Backend, Terminal};

use pfc::{ui, Calculator, Signal};

fn main() -> io::Result<()> {
    let mut terminal = ui::init_terminal()?;
    let result = run(Calculator::default(), &mut terminal);
    ui::cleanup_terminal(terminal)?;
    result
}

fn run<B: Backend>(mut calculator: Calculator, terminal: &mut Terminal<B>) -> io::Result<()> {
    loop {
        terminal.draw(|f| calculator.draw(f))?;

        if let Event::Key(key) = event::read()? {
            if let Signal::Exit = calculator.handle_input(key) {
                return Ok(());
            }
        }
    }
}