summaryrefslogtreecommitdiff
path: root/src/rules
diff options
context:
space:
mode:
authorDavid Gay <eapoems@riseup.net>2023-10-14 17:55:57 -0400
committerDavid Gay <eapoems@riseup.net>2023-10-14 17:56:07 -0400
commitf585f5db852a34e2a6089bd460e7c68b8833ca4a (patch)
tree186ce7a4f752d2cf8220a9c95e3186b23959ebbb /src/rules
parent916a0e84ce3e2d127fd403e15da214431924e4d0 (diff)
Partial implementation of Class struct
Diffstat (limited to 'src/rules')
-rw-r--r--src/rules/ability_scores.rs5
-rw-r--r--src/rules/classes.rs11
-rw-r--r--src/rules/npcs.rs39
3 files changed, 50 insertions, 5 deletions
diff --git a/src/rules/ability_scores.rs b/src/rules/ability_scores.rs
index f255d4f..205c1a3 100644
--- a/src/rules/ability_scores.rs
+++ b/src/rules/ability_scores.rs
@@ -37,7 +37,10 @@ impl AbilityScoreCollection {
}
pub fn add_score(&mut self, ability_score: AbilityScore, bonus: u32) {
- self.scores.entry(ability_score).or_insert_with(Vec::new).push(bonus);
+ self.scores
+ .entry(ability_score)
+ .or_insert_with(Vec::new)
+ .push(bonus);
}
pub fn get_score(&self, ability_score: AbilityScore) -> Option<&Vec<u32>> {
diff --git a/src/rules/classes.rs b/src/rules/classes.rs
index 5cd29d6..cc827f0 100644
--- a/src/rules/classes.rs
+++ b/src/rules/classes.rs
@@ -3,6 +3,7 @@ use serde::Deserialize;
use serde_yaml;
use std::collections::HashMap;
use std::error::Error;
+// use std::fmt;
use std::string::String;
#[derive(Deserialize)]
@@ -31,7 +32,13 @@ impl Classes {
Ok(Classes { classes })
}
- pub fn class(&self, class_name: &str) -> Option<&Class> {
- self.classes.get(class_name)
+ pub fn class(&self, class_name: &str) -> Result<&Class, &'static str> {
+ self.classes.get(class_name).ok_or("Class not found.")
}
}
+//
+// impl fmt::Display for Class {
+// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+// write!(f, "{}", self.name)
+// }
+// }
diff --git a/src/rules/npcs.rs b/src/rules/npcs.rs
index 67eeb47..c3fc86a 100644
--- a/src/rules/npcs.rs
+++ b/src/rules/npcs.rs
@@ -1,7 +1,42 @@
use crate::rules::ability_scores::AbilityScoreCollection;
use crate::rules::classes::Class;
+// use std::fmt;
pub struct Npc {
- pub class: Class,
- pub ability_score_collection: AbilityScoreCollection,
+ pub alignment: Option<String>,
+ pub race: Option<String>,
+ pub class: Option<&'static Class>,
+ pub ability_scores: Option<AbilityScoreCollection>,
}
+
+impl Npc {
+ pub fn new(
+ alignment: Option<String>,
+ race: Option<String>,
+ class: Option<&'static Class>,
+ ability_scores: Option<AbilityScoreCollection>,
+ ) -> Self {
+ Npc {
+ alignment,
+ race,
+ class,
+ ability_scores,
+ }
+ }
+}
+
+// impl fmt::Display for Npc {
+// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+// let values: Vec<&str> = vec![
+// self.alignment.as_deref().unwrap_or(""),
+// self.race.as_deref().unwrap_or(""),
+// self.class.as_ref().map_or("", |class| &class.name),
+// ]
+// .into_iter()
+// .filter(|&s| !s.is_empty())
+// .collect();
+//
+// let formatted_string = values.join(" ");
+// write!(f, "{}", formatted_string)
+// }
+// }