use proto::*; use std::collections::HashMap; #[derive(Debug, Default, Clone)] pub struct GachaProgress { /// The pity (counting how many pulls) of this pull (in previous record) or the next pull (in status). pub pity: u32, /// The failure times of this category. pub categories_progress_map: HashMap, /// The selected priority (category) for a Chooseable category. pub categories_chosen_guarantee_category_map: HashMap, /// The selectedpriority (a specified item) for a Chooseable category. pub categories_chosen_guarantee_item_map: HashMap, /// The failure times for selected priority (a specified item). pub categories_chosen_guarantee_progress_map: HashMap, } impl GachaProgress { pub fn from_bin(bin: GachaProgressBin) -> Self { Self { pity: bin.pity, categories_progress_map: bin.categories_progress_map, categories_chosen_guarantee_category_map: bin.categories_chosen_guarantee_category_map, categories_chosen_guarantee_item_map: bin.categories_chosen_guarantee_item_map, categories_chosen_guarantee_progress_map: bin.categories_chosen_guarantee_progress_map, } } pub fn to_bin(&self) -> GachaProgressBin { GachaProgressBin { pity: self.pity, categories_progress_map: self.categories_progress_map.clone(), categories_chosen_guarantee_category_map: self .categories_chosen_guarantee_category_map .clone(), categories_chosen_guarantee_item_map: self.categories_chosen_guarantee_item_map.clone(), categories_chosen_guarantee_progress_map: self .categories_chosen_guarantee_progress_map .clone(), } } } #[derive(Debug, Default, Clone)] pub struct GachaStatus { pub rarity_status_map: HashMap, pub discount_usage_map: HashMap, } impl GachaStatus { pub fn from_bin(bin: GachaStatusBin) -> Self { Self { rarity_status_map: bin .rarity_status_map .into_iter() .map(|(k, v)| (k, GachaProgress::from_bin(v))) .collect(), discount_usage_map: bin.discount_usage_map, } } pub fn to_bin(&self) -> GachaStatusBin { GachaStatusBin { rarity_status_map: self .rarity_status_map .iter() .map(|(k, v)| (k.clone(), v.to_bin())) .collect(), discount_usage_map: self.discount_usage_map.clone(), } } }