kegani 0.1.1

A developer-friendly, ergonomic, production-ready Rust web framework
Documentation
//! Chat room for WebSocket
//!
//! Provides a simple chat room implementation.
//!
//! Note: This is a simplified implementation. For full WebSocket support,
//! enable the `websocket` feature in Cargo.toml.

use std::collections::HashMap;

/// Chat room event
#[derive(Debug, Clone)]
pub struct RoomEvent {
    pub user_id: String,
    pub event_type: EventType,
    pub payload: String,
}

#[derive(Debug, Clone)]
pub enum EventType {
    Join,
    Leave,
    Message,
    Typing,
}

/// Chat room manager
pub struct ChatRoomManager {
    rooms: HashMap<String, usize>, // room_id -> member_count
}

impl ChatRoomManager {
    /// Create a new manager
    pub fn new() -> Self {
        Self {
            rooms: HashMap::new(),
        }
    }

    /// Get or create a room
    pub fn get_or_create_room(&mut self, room_id: &str) -> usize {
        let count = self.rooms.entry(room_id.to_string()).or_insert(0);
        *count += 1;
        *count
    }

    /// Remove a room
    pub fn remove_room(&mut self, room_id: &str) {
        if let Some(count) = self.rooms.get_mut(room_id) {
            *count = count.saturating_sub(1);
            if *count == 0 {
                self.rooms.remove(room_id);
            }
        }
    }

    /// Get room count
    pub fn room_count(&self) -> usize {
        self.rooms.len()
    }
}

impl Default for ChatRoomManager {
    fn default() -> Self {
        Self::new()
    }
}