diff options
Diffstat (limited to 'src/rules/classes.rs')
-rw-r--r-- | src/rules/classes.rs | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/src/rules/classes.rs b/src/rules/classes.rs index cc827f0..75fdf5c 100644 --- a/src/rules/classes.rs +++ b/src/rules/classes.rs @@ -2,8 +2,9 @@ use crate::rules::ability_scores::AbilityScore; use serde::Deserialize; use serde_yaml; use std::collections::HashMap; -use std::error::Error; +use std::hash::Hash; // use std::fmt; +use lazy_static::lazy_static; use std::string::String; #[derive(Deserialize)] @@ -20,22 +21,15 @@ pub struct NpcAbilityScoreModifier { pub modifier: i32, } -const CLASSES_YAML: &str = include_str!("../data/rules/classes.yaml"); - -pub struct Classes { - classes: HashMap<String, Class>, +lazy_static! { + pub static ref CLASSES: HashMap<String, Class> = load_classes(); } -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) -> Result<&Class, &'static str> { - self.classes.get(class_name).ok_or("Class not found.") - } +fn load_classes() -> HashMap<String, Class> { + let yaml_data = include_str!("../data/rules/classes.yaml"); + serde_yaml::from_str(yaml_data).expect("Failed to parse classes YAML") } + // // impl fmt::Display for Class { // fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |