diff options
-rw-r--r-- | src/rules/ability_scores.rs | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/rules/ability_scores.rs b/src/rules/ability_scores.rs index a0da9d9..f255d4f 100644 --- a/src/rules/ability_scores.rs +++ b/src/rules/ability_scores.rs @@ -1,6 +1,7 @@ use serde::Deserialize; +use std::collections::HashMap; -#[derive(Debug, Deserialize, PartialEq, Clone, Copy)] +#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone, Copy)] pub enum AbilityScore { Strength, Intelligence, @@ -22,3 +23,24 @@ impl AbilityScore { } } } + +#[derive(Debug)] +pub struct AbilityScoreCollection { + scores: HashMap<AbilityScore, Vec<u32>>, +} + +impl AbilityScoreCollection { + pub fn new() -> Self { + AbilityScoreCollection { + scores: HashMap::new(), + } + } + + pub fn add_score(&mut self, ability_score: AbilityScore, bonus: u32) { + self.scores.entry(ability_score).or_insert_with(Vec::new).push(bonus); + } + + pub fn get_score(&self, ability_score: AbilityScore) -> Option<&Vec<u32>> { + self.scores.get(&ability_score) + } +} |