use crate::rules::ability_scores::AbilityScore; use serde::Deserialize; use serde_yaml; use std::collections::HashMap; use std::error::Error; // use std::fmt; use std::string::String; #[derive(Deserialize)] pub struct Class { pub name: String, pub prime_requisites: Vec, #[serde(default)] pub npc_ability_score_modifiers: Vec, } #[derive(Deserialize)] pub struct NpcAbilityScoreModifier { pub ability_score: AbilityScore, pub modifier: i32, } const CLASSES_YAML: &str = include_str!("../data/rules/classes.yaml"); pub struct Classes { classes: HashMap, } impl Classes { pub fn new() -> Result> { let classes: HashMap = serde_yaml::from_str(CLASSES_YAML)?; Ok(Classes { classes }) } pub fn class(&self, class_name: &str) -> Result<&Class, &'static str> { self.classes.get(class_name).ok_or("Class not found.") } } // // impl fmt::Display for Class { // fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { // write!(f, "{}", self.name) // } // }