diff options
Diffstat (limited to 'src/rules')
-rw-r--r-- | src/rules/classes.rs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/rules/classes.rs b/src/rules/classes.rs index 4d8f809..5cd29d6 100644 --- a/src/rules/classes.rs +++ b/src/rules/classes.rs @@ -1,10 +1,15 @@ 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<AbilityScore>, + #[serde(default)] pub npc_ability_score_modifiers: Vec<NpcAbilityScoreModifier>, } @@ -13,3 +18,20 @@ 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<String, Class>, +} + +impl Classes { + pub fn new() -> Result<Self, Box<dyn Error>> { + let classes: HashMap<String, Class> = serde_yaml::from_str(CLASSES_YAML)?; + Ok(Classes { classes }) + } + + pub fn class(&self, class_name: &str) -> Option<&Class> { + self.classes.get(class_name) + } +} |