use std::fmt::Display; use serde::Deserialize; #[derive(Debug, Deserialize, PartialEq, Eq)] pub struct Recipes { pub starters: Vec, pub soups: Vec, pub fish: Vec, pub meat: Vec, pub deserts: Vec, } #[derive(Debug, Deserialize, PartialEq, Eq)] pub struct Recipe { pub name: String, pub is_special: bool, pub ingredients: Vec, pub normal: FoodStats, pub plus: FoodStats, } impl Recipe { pub fn stats(&self, is_plus: bool) -> &FoodStats { if is_plus { &self.plus } else { &self.normal } } } #[derive(Debug, Deserialize, PartialEq, Eq)] pub struct FoodStats { pub str: u8, pub mag: u8, pub def: u8, pub hp: u8, pub mp: u8, } impl Display for FoodStats { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let val = serde_json::json!({ "str": self.str, "mag": self.mag, "def": self.def, "hp": self.hp, "mp": self.mp }); f.write_str(&val.to_string())?; Ok(()) } }