#![allow(dead_code)] use super::blackjack::BlackjackGame; use super::roulette::RouletteGame; use super::slots::SlotsGame; use super::traits::Game; use std::collections::HashMap; use std::sync::{Arc, Mutex}; pub type GameRef = Arc; pub struct GameRegistry { games: Arc>>, } impl GameRegistry { pub fn new() -> Self { Self { games: Arc::new(Mutex::new(HashMap::new())), } } pub fn with_defaults() -> Self { let registry = Self::new(); registry.register_game(SlotsGame::new()); registry.register_game(RouletteGame::new()); registry.register_game(BlackjackGame::new()); registry } pub fn register_game(&self, game: G) { let game_type = game.game_type().to_string(); let mut games = self.games.lock().unwrap(); games.insert(game_type, Arc::new(game)); } pub fn get_game(&self, game_type: &str) -> Option { let games = self.games.lock().unwrap(); games.get(game_type).cloned() } pub fn list_games(&self) -> Vec { let games = self.games.lock().unwrap(); games.keys().cloned().collect() } pub fn game_exists(&self, game_type: &str) -> bool { let games = self.games.lock().unwrap(); games.contains_key(game_type) } }