rs_poker 5.0.0

A library to help with any Rust code dealing with poker. This includes card values, suits, hands, hand ranks, 5 card hand strength calculation, 7 card hand strength calulcation, and monte carlo game simulation helpers.
Documentation
use clap::{Args, Subcommand};

pub mod charts;
pub mod compare;
pub mod diag;
pub mod generate;
pub mod verify;

#[derive(Args)]
pub struct ArenaArgs {
    #[command(subcommand)]
    command: ArenaCommand,
}

#[derive(Subcommand)]
enum ArenaCommand {
    /// View preflop charts for an agent config in an interactive TUI
    Charts(charts::ChartsArgs),
    /// Compare poker agents across all possible matchups
    Compare(compare::CompareArgs),
    /// Summarize a captured cfr_diag JSONL stream
    Diag(diag::DiagArgs),
    /// Generate Open Hand History files from poker simulations
    Generate(generate::GenerateArgs),
    /// Verify agent config files load correctly
    Verify(verify::VerifyArgs),
}

#[derive(Debug, thiserror::Error)]
pub enum ArenaError {
    #[error(transparent)]
    Charts(#[from] charts::ChartsError),
    #[error(transparent)]
    Compare(#[from] compare::CompareError),
    #[error(transparent)]
    Diag(#[from] diag::DiagError),
    #[error(transparent)]
    Generate(#[from] generate::GenerateError),
    #[error(transparent)]
    Verify(#[from] verify::VerifyError),
}

pub async fn run(
    args: ArenaArgs,
    default_budget: rs_poker::arena::cfr::BudgetConfig,
) -> Result<(), ArenaError> {
    match args.command {
        ArenaCommand::Charts(a) => charts::run(a)?,
        ArenaCommand::Compare(a) => compare::run(a, &default_budget).await?,
        ArenaCommand::Diag(a) => diag::run(a)?,
        ArenaCommand::Generate(a) => generate::run(a, &default_budget).await?,
        ArenaCommand::Verify(a) => verify::run(a)?,
    }
    Ok(())
}