summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Gay <eapoems@riseup.net>2023-10-14 18:44:13 -0400
committerDavid Gay <eapoems@riseup.net>2023-10-14 18:44:13 -0400
commitc220702eef49d1762b91502f1dbf486e1fc81d0c (patch)
treefe56f0ad986bafe950a2c6830bd50ccb5fcd018d /src
parentf585f5db852a34e2a6089bd460e7c68b8833ca4a (diff)
Improve class data loading
Diffstat (limited to 'src')
-rw-r--r--src/main.rs19
-rw-r--r--src/random_tables.rs5
-rw-r--r--src/rules/classes.rs22
3 files changed, 15 insertions, 31 deletions
diff --git a/src/main.rs b/src/main.rs
index e2c46ac..5f50fa7 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,16 +1,10 @@
-use lazy_static::lazy_static;
-
use dmn::dice;
use dmn::random_tables::RandomTables;
-use dmn::rules::classes::Classes;
+use dmn::rules::classes::CLASSES;
use dmn::rules::npcs::Npc;
mod cli;
-lazy_static! {
- static ref CLASSES: Classes = Classes::new().expect("Failed to load classes.");
-}
-
fn main() {
let matches = cli::cli().get_matches();
let random_tables = RandomTables::new().expect("Failed to load random tables.");
@@ -21,13 +15,10 @@ fn main() {
match random_command {
("henchman", _) => {
let class_name = random_tables.roll_table("henchman_class").to_string();
- let class_ref = match CLASSES.class(&class_name) {
- Ok(class_ref) => class_ref,
- Err(err) => {
- eprintln!("Error: {}", err);
- std::process::exit(1);
- }
- };
+ let class_ref = CLASSES.get(&*class_name).unwrap_or_else(|| {
+ eprintln!("Class '{}' not found.", &*class_name);
+ std::process::exit(1);
+ });
let npc = Npc::new(
Some(random_tables.roll_table("npc_alignment")),
Some(random_tables.roll_table("henchman_race")),
diff --git a/src/random_tables.rs b/src/random_tables.rs
index 07f0022..4411675 100644
--- a/src/random_tables.rs
+++ b/src/random_tables.rs
@@ -1,5 +1,5 @@
use crate::dice;
-use crate::rules::classes::Classes;
+use crate::rules::classes::CLASSES;
use include_dir::{include_dir, Dir};
use serde::Deserialize;
use serde_yaml;
@@ -71,9 +71,8 @@ impl RandomTables {
}
if let Some(class_string) = &step.class {
- let classes = Classes::new().unwrap();
let class =
- classes.class(class_string).expect("Failed to load class.");
+ CLASSES.get(class_string).expect("Failed to load class.");
output_text.push_str(&*class.name);
}
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 {