// Auto-generated from JSON data // Do not edit manually use serde::{Deserialize, Serialize}; use anyhow::Result; use std::collections::HashMap; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Bufftable { #[serde(rename = "AddBuffId")] pub add_buff_id: Option, #[serde(rename = "buffApplyType")] pub buff_apply_type: Option, #[serde(rename = "buffConditionId")] pub buff_condition_id: Option, #[serde(rename = "buffCountType")] pub buff_count_type: Option, #[serde(rename = "buffDescSkillTextId")] pub buff_desc_skill_text_id: Option, #[serde(rename = "buffDisplayType")] pub buff_display_type: Option, #[serde(rename = "buffDisplayValue")] pub buff_display_value: Option, #[serde(rename = "buffGroup")] pub buff_group: Option, #[serde(rename = "buffIconSpriteName")] pub buff_icon_sprite_name: Option, #[serde(rename = "buffMakerType")] pub buff_maker_type: Option, #[serde(rename = "buffSkillTextId")] pub buff_skill_text_id: Option, #[serde(rename = "buffTurn")] pub buff_turn: Option, #[serde(rename = "buffType")] pub buff_type: Option, #[serde(rename = "buffValue")] pub buff_value: Option, #[serde(rename = "classType")] pub class_type: String, #[serde(rename = "conditionAddBuffId")] pub condition_add_buff_id: Option, #[serde(rename = "effectPrefabName")] pub effect_prefab_name: Option, #[serde(rename = "id")] pub id: i32, #[serde(rename = "magicValue")] pub magic_value: Option, #[serde(rename = "overLapCount")] pub over_lap_count: Option, #[serde(rename = "overLapMax")] pub over_lap_max: Option, #[serde(rename = "ownerType")] pub owner_type: Option, #[serde(rename = "specialEffectPrefabName")] pub special_effect_prefab_name: Option, #[serde(rename = "statType")] pub stat_type: Option, #[serde(rename = "subType")] pub sub_type: Option, } pub struct BufftableTable { records: Vec, by_id: HashMap, } impl BufftableTable { pub fn load(path: &str) -> Result { let json = std::fs::read_to_string(path)?; let records: Vec = serde_json::from_str(&json)?; let mut by_id = HashMap::with_capacity(records.len()); for (idx, record) in records.iter().enumerate() { by_id.insert(record.id, idx); } Ok(Self { records, by_id, }) } #[inline] pub fn get(&self, id: i32) -> Option<&Bufftable> { self.by_id.get(&id).map(|&idx| &self.records[idx]) } #[inline] pub fn all(&self) -> &[Bufftable] { &self.records } #[inline] pub fn iter(&self) -> std::slice::Iter { self.records.iter() } pub fn len(&self) -> usize { self.records.len() } pub fn is_empty(&self) -> bool { self.records.is_empty() } }