oh-my-todo 0.2.0

Local-first terminal task manager with a mouse-first TUI and CLI.
Documentation
use oh_my_todo::application::AppError;
use oh_my_todo::{BootstrapOptions, bootstrap, cli, tui};
use std::env;
use std::process::ExitCode;

fn main() -> ExitCode {
    match run() {
        Ok(code) => code,
        Err(error) => {
            eprintln!("error: {error}");
            if let Some(hint) = error.hint() {
                eprintln!("hint: {hint}");
            }
            error.exit_code()
        }
    }
}

fn run() -> Result<ExitCode, AppError> {
    let args = env::args().skip(1).collect::<Vec<_>>();
    if args.is_empty() {
        let context = bootstrap(BootstrapOptions::default())?;
        tui::run(&context)?;
        return Ok(ExitCode::SUCCESS);
    }

    let parsed = match cli::parse(&args) {
        Ok(parsed) => parsed,
        Err(error) => {
            let code = error.exit_code();
            error.print().expect("clap error should print");
            return Ok(ExitCode::from(code as u8));
        }
    };

    let context = bootstrap(BootstrapOptions::default())?;
    cli::handlers::dispatch(&context, parsed)?;
    Ok(ExitCode::SUCCESS)
}