use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use super::common::JsonObject;
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Game {
#[serde(default)]
pub id: i32,
#[serde(default)]
pub name: String,
#[serde(rename = "databaseName", default)]
pub database_name: String,
#[serde(rename = "modeNames", default)]
pub mode_names: HashMap<String, String>,
#[serde(default)]
pub retired: bool,
#[serde(default)]
pub legacy: bool,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct SkillsResource {
#[serde(default)]
pub version: String,
#[serde(default)]
pub skills: HashMap<String, Skill>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Skill {
#[serde(default)]
pub name: String,
#[serde(default)]
pub description: String,
#[serde(rename = "maxLevel", default)]
pub max_level: i32,
#[serde(default)]
pub levels: Vec<SkillLevel>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct SkillLevel {
#[serde(default)]
pub level: i32,
#[serde(rename = "totalExpRequired", default)]
pub total_exp_required: f64,
#[serde(default)]
pub unlocks: Vec<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct SkyBlockItem {
#[serde(default)]
pub id: String,
#[serde(default)]
pub material: Option<String>,
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub tier: Option<String>,
#[serde(default)]
pub npc_sell_price: Option<f64>,
#[serde(default)]
pub category: Option<String>,
#[serde(flatten)]
pub extra: JsonObject,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct CollectionsResource {
#[serde(default)]
pub version: String,
#[serde(default)]
pub collections: HashMap<String, Value>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ResourcePack {
#[serde(default)]
pub id: String,
#[serde(rename = "deployId", default)]
pub deploy_id: String,
#[serde(rename = "lastUpdated", default)]
pub last_updated: i64,
#[serde(default)]
pub versions: Vec<ResourcePackVersion>,
#[serde(flatten)]
pub extra: JsonObject,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ResourcePackVersion {
#[serde(rename = "packFormat", default)]
pub pack_format: i32,
#[serde(default)]
pub hash: String,
#[serde(default)]
pub url: String,
#[serde(flatten)]
pub extra: JsonObject,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ElectionResource {
#[serde(default)]
pub mayor: Option<Value>,
#[serde(default)]
pub current: Option<Value>,
}
#[derive(Debug, Clone, Deserialize)]
pub(crate) struct GamesResponse {
#[serde(default)]
pub games: HashMap<String, Game>,
}
#[derive(Debug, Clone, Deserialize)]
pub(crate) struct ItemsResponse {
#[serde(default)]
pub items: Vec<SkyBlockItem>,
}
#[derive(Debug, Clone, Deserialize)]
pub(crate) struct PacksResponse {
#[serde(default)]
pub packs: Vec<ResourcePack>,
}