tcg_db 0.1.0

Pokemon TCG game engine database and card metadata
Documentation
use rusqlite::{params, Connection, Result};

struct EnergySpec {
    def_id: &'static str,
    name: &'static str,
    provides: &'static str,
}

const BASIC_ENERGIES: &[EnergySpec] = &[
    EnergySpec {
        def_id: "ENERGY-GRASS",
        name: "Grass Energy",
        provides: "Grass",
    },
    EnergySpec {
        def_id: "ENERGY-FIRE",
        name: "Fire Energy",
        provides: "Fire",
    },
    EnergySpec {
        def_id: "ENERGY-WATER",
        name: "Water Energy",
        provides: "Water",
    },
    EnergySpec {
        def_id: "ENERGY-LIGHTNING",
        name: "Lightning Energy",
        provides: "Lightning",
    },
    EnergySpec {
        def_id: "ENERGY-PSYCHIC",
        name: "Psychic Energy",
        provides: "Psychic",
    },
    EnergySpec {
        def_id: "ENERGY-FIGHTING",
        name: "Fighting Energy",
        provides: "Fighting",
    },
    EnergySpec {
        def_id: "ENERGY-DARKNESS",
        name: "Darkness Energy",
        provides: "Darkness",
    },
    EnergySpec {
        def_id: "ENERGY-METAL",
        name: "Metal Energy",
        provides: "Metal",
    },
    EnergySpec {
        def_id: "ENERGY-COLORLESS",
        name: "Colorless Energy",
        provides: "Colorless",
    },
];

pub fn add_basic_energies(conn: &Connection) -> Result<usize> {
    conn.execute(
        "INSERT OR IGNORE INTO sets (code, name, era) VALUES (?, ?, ?)",
        params!["ENERGY", "Basic Energy", "EX"],
    )?;

    let set_id: i64 = conn.query_row(
        "SELECT set_id FROM sets WHERE code = ?",
        params!["ENERGY"],
        |row| row.get(0),
    )?;

    let mut inserted = 0;
    for spec in BASIC_ENERGIES {
        let number = spec
            .def_id
            .split('-')
            .nth(1)
            .unwrap_or(spec.def_id);
        let payload = serde_json::json!({ "provides": [spec.provides] }).to_string();
        conn.execute(
            "INSERT OR REPLACE INTO cards (
                card_def_id, set_id, number, name, supertype,
                subtypes_json, tags_json, energy_kind,
                script_kind, script_payload
            ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
            params![
                spec.def_id,
                set_id,
                number,
                spec.name,
                "Energy",
                "[]",
                "[]",
                "Basic",
                "Dsl",
                payload
            ],
        )?;
        inserted += 1;
    }

    Ok(inserted)
}