diff options
-rw-r--r-- | src/rules/magic_items.rs | 61 |
1 files changed, 45 insertions, 16 deletions
diff --git a/src/rules/magic_items.rs b/src/rules/magic_items.rs index d074b0b..aa38b69 100644 --- a/src/rules/magic_items.rs +++ b/src/rules/magic_items.rs @@ -4,30 +4,59 @@ use serde_yaml; use std::collections::HashMap; use std::string::String; -#[derive(Deserialize)] -pub struct MagicItem { - pub name: String, - pub kind: MagicItemKind, +trait MagicItem { + fn name(&self) -> &str; } -#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone, Copy)] -pub enum MagicItemKind { - Sword, - Potion, - Scroll, - Ring, - RodStaffWand, - Misc, - ArmorShield, - MiscWeapon, +struct Sword { + name: String, } +struct Potion { + name: String, +} + +struct Scroll { + name: String, +} + +struct Ring { + name: String, +} + +struct RodStaffWand { + name: String, +} + +struct Misc { + name: String, +} + +struct ArmorShield { + name: String, +} + +struct MiscWeapon { + name: String, +} + +impl MagicItem for Sword {} +impl MagicItem for Potion {} +impl MagicItem for Scroll {} +impl MagicItem for Ring {} +impl MagicItem for RodStaffWand {} +impl MagicItem for Misc {} +impl MagicItem for ArmorShield {} +impl MagicItem for MiscWeapon {} + lazy_static! { - pub static ref MAGIC_ITEMS: HashMap<String, MagicItem> = load_magic_items(); + pub static ref MAGIC_ITEMS: HashMap<String, Box<dyn MagicItem>> = load_magic_items(); } // TODO: Is this actually needed? Is there a real race condition this is avoiding? -fn load_magic_items() -> HashMap<String, MagicItem> { +fn load_magic_items() -> HashMap<String, Box<dyn MagicItem>> { let yaml_data = include_str!("../data/rules/magic_items.yaml"); serde_yaml::from_str(yaml_data).expect("Failed to parse magic items YAML") + + items } |