use crate::rules::ability_scores::AbilityScore; use serde::Deserialize; use serde_yaml; use std::collections::HashMap; use std::error::Error; 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) -> Option<&Class> { self.classes.get(class_name) } }