Skip to main content

ably_chat/
room.rs

1//! The room-scoped handle (ADR-0010).
2
3use crate::client::Client;
4use crate::messages::Messages;
5use crate::occupancy::OccupancyHandle;
6use crate::types::RoomName;
7
8/// A handle to a single chat room, scoped by [`RoomName`].
9///
10/// Rooms are implicit: obtaining a `Room` neither creates nor deletes anything
11/// server-side. Cheap to `Clone` (`Arc`-backed via [`Client`]) and `Send + Sync`.
12#[derive(Clone, Debug)]
13pub struct Room {
14    client: Client,
15    room: RoomName,
16}
17
18impl Room {
19    pub(crate) fn new(client: Client, room: RoomName) -> Self {
20        Self { client, room }
21    }
22
23    /// The name of this room.
24    pub fn name(&self) -> &RoomName {
25        &self.room
26    }
27
28    /// Message operations (send, get, update, delete, history, versions).
29    pub fn messages(&self) -> Messages {
30        Messages::new(self.client.clone(), self.room.clone())
31    }
32
33    /// Room occupancy metrics.
34    pub fn occupancy(&self) -> OccupancyHandle {
35        OccupancyHandle::new(self.client.clone(), self.room.clone())
36    }
37}