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, 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)
+ }
+}