summaryrefslogtreecommitdiff
path: root/src/rules/classes.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/rules/classes.rs')
-rw-r--r--src/rules/classes.rs22
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 {