summaryrefslogtreecommitdiff
path: root/src/rules/races.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/rules/races.rs')
-rw-r--r--src/rules/races.rs23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/rules/races.rs b/src/rules/races.rs
new file mode 100644
index 0000000..700c7ea
--- /dev/null
+++ b/src/rules/races.rs
@@ -0,0 +1,23 @@
+use crate::rules::ability_scores::AbilityScore;
+use lazy_static::lazy_static;
+use serde::Deserialize;
+use serde_yaml;
+use std::collections::HashMap;
+use std::string::String;
+
+#[derive(Deserialize)]
+pub struct Race {
+ pub name: String,
+ pub ability_score_modifiers: HashMap<AbilityScore, i32>,
+ pub npc_ability_score_modifiers: HashMap<AbilityScore, i32>,
+}
+
+lazy_static! {
+ pub static ref RACES: HashMap<String, Race> = load_races();
+}
+
+// TODO: Is this actually needed? Is there a real race condition this is avoiding?
+fn load_races() -> HashMap<String, Race> {
+ let yaml_data = include_str!("../data/rules/races.yaml");
+ serde_yaml::from_str(yaml_data).expect("Failed to parse races YAML")
+}