use std::fmt; use crate::{entity::Entity, generators::TownNameGenerator}; #[derive(Clone)] pub struct Town { pub name: String, } #[derive(Clone)] pub struct Tavern { pub name: String, } #[derive(Clone)] pub enum Structure { Town(Town), Tavern(Tavern), } pub struct Site { pub entity: Entity, pub structure: Structure, } impl Town { pub fn new() -> Town { Town { name: TownNameGenerator::name(), } } } impl Tavern { pub fn new() -> Tavern { Tavern { name: TownNameGenerator::name(), } } } impl fmt::Display for Structure { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { Structure::Town(t) => write!(f, "Town: {}", t.name), Structure::Tavern(t) => write!(f, "Tavern: {}", t.name), } } } impl fmt::Display for Site { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{}", self.structure) } }