formanator 3.0.0

Submit Forma <https://joinforma.com> benefit claims from the command line, with support for AI-powered receipt analysis via OpenAI or GitHub Models
Documentation
use std::process::ExitCode;

use anyhow::Result;
use clap::Parser;
use colored::Colorize;

use formanator::cli::{Cli, Command};
use formanator::commands;

fn dispatch(cli: Cli) -> Result<()> {
    match cli.command {
        Command::Login(args) => commands::login::run(args),
        Command::Benefits(args) => commands::benefits::run(args),
        Command::Categories(args) => commands::categories::run(args),
        Command::ListClaims(args) => commands::list_claims::run(args),
        Command::SubmitClaim(args) => commands::submit_claim::run(args),
        Command::GenerateTemplateCsv(args) => commands::generate_template_csv::run(args),
        Command::SubmitClaimsFromCsv(args) => commands::submit_claims_from_csv::run(args),
        Command::SubmitClaimsFromDirectory(args) => {
            commands::submit_claims_from_directory::run(args)
        }
        Command::ValidateCsv(args) => commands::validate_csv::run(args),
        #[cfg(feature = "mcp")]
        Command::Mcp(args) => formanator::mcp::run(args),
    }
}

fn main() -> ExitCode {
    let cli = Cli::parse();
    match dispatch(cli) {
        Ok(()) => ExitCode::SUCCESS,
        Err(e) => {
            eprintln!("{}", format!("{e:#}").red());
            ExitCode::FAILURE
        }
    }
}