From f585f5db852a34e2a6089bd460e7c68b8833ca4a Mon Sep 17 00:00:00 2001 From: David Gay Date: Sat, 14 Oct 2023 17:55:57 -0400 Subject: Partial implementation of Class struct --- src/rules/ability_scores.rs | 5 ++++- src/rules/classes.rs | 11 +++++++++-- src/rules/npcs.rs | 39 +++++++++++++++++++++++++++++++++++++-- 3 files changed, 50 insertions(+), 5 deletions(-) (limited to 'src/rules') 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> { 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, + pub race: Option, + pub class: Option<&'static Class>, + pub ability_scores: Option, } + +impl Npc { + pub fn new( + alignment: Option, + race: Option, + class: Option<&'static Class>, + ability_scores: Option, + ) -> 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) +// } +// } -- cgit v1.2.3