tcg_db 0.1.0

Pokemon TCG game engine database and card metadata
Documentation
use std::env;

use rusqlite::Connection;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let args: Vec<String> = env::args().collect();
    if args.len() != 6 && args.len() != 7 {
        eprintln!(
            "Usage: {} <db_path> <cg_jsonl> <df_jsonl> <rs_jsonl> [ss_jsonl] <out_report>",
            args[0]
        );
        std::process::exit(1);
    }

    let db_path = &args[1];
    let cg_path = &args[2];
    let df_path = &args[3];
    let rs_path = &args[4];
    let (ss_path, report_path) = if args.len() == 7 {
        (Some(&args[5]), &args[6])
    } else {
        (None, &args[5])
    };

    let conn = Connection::open(db_path)?;
    tcg_db::run_migrations(&conn)?;

    let cg_report = tcg_db::import_jsonl(&conn, cg_path, "CG", 100)?;
    let df_report = tcg_db::import_jsonl(&conn, df_path, "DF", 101)?;
    let rs_report = tcg_db::import_jsonl(&conn, rs_path, "RS", 109)?;
    let ss_report = match ss_path {
        Some(path) => Some(tcg_db::import_jsonl(&conn, path, "SS", 100)?),
        None => None,
    };
    let energy_added = tcg_db::add_basic_energies(&conn)?;

    let mut report = format!(
        "CG imported: {}, skipped: {}\nDF imported: {}, skipped: {}\nRS imported: {}, skipped: {}\n",
        cg_report.imported,
        cg_report.skipped,
        df_report.imported,
        df_report.skipped,
        rs_report.imported,
        rs_report.skipped
    );
    if let Some(ss_report) = ss_report {
        report.push_str(&format!(
            "SS imported: {}, skipped: {}\n",
            ss_report.imported, ss_report.skipped
        ));
    }
    report.push_str(&format!("Basic energy added: {}\n", energy_added));
    std::fs::write(report_path, report)?;
    Ok(())
}