budget_tracker_tui 1.4.1

A feature rich TUI budget tracker app
mod app;
mod config;
mod csv_io;
mod db;
mod events;
mod model;
mod recurring;
mod ui;
mod validation;

use crate::app::state::App;
use events::run_app;

use crossterm::{
    ExecutableCommand,
    event::{DisableBracketedPaste, EnableBracketedPaste},
    terminal::{EnterAlternateScreen, LeaveAlternateScreen, disable_raw_mode, enable_raw_mode},
};
use ratatui::prelude::{CrosstermBackend, Terminal};
use std::io::stdout;
use std::result::Result as StdResult;

fn main() -> StdResult<(), Box<dyn std::error::Error>> {
    enable_raw_mode()?;
    stdout()
        .execute(EnterAlternateScreen)?
        .execute(EnableBracketedPaste)?;
    let mut terminal = Terminal::new(CrosstermBackend::new(stdout()))?;

    let mut app = App::new();
    let initial_status = app.status_message.clone();

    let run_result = run_app(&mut terminal, &mut app);

    stdout().execute(DisableBracketedPaste)?;
    disable_raw_mode()?;
    stdout().execute(LeaveAlternateScreen)?;

    if let Some(msg) = initial_status {
        eprintln!("Initial Status: {}", msg);
    }

    match run_result {
        Ok(_) => Ok(()),
        Err(run_err) => {
            eprintln!("Application Error: {}", run_err);
            Err(run_err)
        }
    }
}