card pack meta

This commit is contained in:
Adam 2024-08-03 00:38:01 -04:00
parent ecf9302ef5
commit cf7b5367f8
2 changed files with 65 additions and 4 deletions

View file

@ -101,11 +101,11 @@ pub struct CardBlack {
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
pub struct CardSet { pub struct CardSet {
/// Name of the pack /// Name of the pack
name: String, pub name: String,
/// Pack Description /// Pack Description
description: Option<String>, pub description: Option<String>,
/// Whether or not this is an official card pack /// Whether or not this is an official card pack
official: bool, pub official: bool,
/// White card data /// White card data
pub white: Option<Vec<CardWhite>>, pub white: Option<Vec<CardWhite>>,
/// Black card data /// Black card data

View file

@ -16,6 +16,16 @@ use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
pub mod api; pub mod api;
use crate::api::*; use crate::api::*;
/// Card Pack Meta
#[derive(Debug)]
pub struct CardPackMeta {
name: String,
description: Option<String>,
pack: u8,
num_white: usize,
num_black: usize,
}
/// Parse json for card data /// Parse json for card data
fn load_cards_from_json(path: &str) -> Result<Vec<CardSet>> { fn load_cards_from_json(path: &str) -> Result<Vec<CardSet>> {
let data: String = let data: String =
@ -23,7 +33,58 @@ fn load_cards_from_json(path: &str) -> Result<Vec<CardSet>> {
let jayson: Vec<CardSet> = let jayson: Vec<CardSet> =
serde_json::from_str(&data).with_context(|| format!("\"{path}\" is invalid json"))?; serde_json::from_str(&data).with_context(|| format!("\"{path}\" is invalid json"))?;
Ok(jayson) let mut official: Vec<CardSet> = vec![];
let mut official_meta: Vec<CardPackMeta> = vec![];
let mut unofficial: Vec<CardSet> = vec![];
let mut unofficial_meta: Vec<CardPackMeta> = vec![];
for set in jayson {
let mut num_white = 0;
let mut num_black = 0;
let mut pack: Option<u8> = Option::None;
if let Some(white) = set.white {
num_white = white.len();
if num_white > 0 {
pack = Some(white[0].pack)
}
}
if let Some(black) = set.black {
num_black = black.len();
if num_black > 0 {
pack = Some(black[0].pack)
}
}
let meta = CardPackMeta {
name: set.name,
description: set.description,
pack: pack.expect("No card pack number!"),
num_white,
num_black,
};
if set.official {
official_meta.push(meta);
} else {
unofficial_meta.push(meta);
}
}
tracing::debug!("{} official", official.len());
tracing::debug!("{} official meta", official_meta.len());
tracing::debug!("{} unofficial", unofficial.len());
tracing::debug!("{} unofficial meta", unofficial_meta.len());
tracing::debug!("{:#?}", official_meta[0]);
tracing::debug!("{:#?}", unofficial_meta[0]);
official.shrink_to_fit();
official_meta.shrink_to_fit();
unofficial.shrink_to_fit();
unofficial_meta.shrink_to_fit();
Ok(official)
} }
/// Parse name list /// Parse name list