3 Commits

3 changed files with 15 additions and 11 deletions
Unified View
  1. +8
    -0
      client/src/room/event.rs
  2. +4
    -11
      client/src/room/map.rs
  3. +3
    -0
      client/src/room/state.rs

+ 8
- 0
client/src/room/event.rs View File

@ -1,3 +1,5 @@
//! This module defines events affecting the room module and their handling.
use solstice_proto::server::{ use solstice_proto::server::{
RoomJoinResponse, RoomListResponse, RoomMessageResponse, RoomJoinResponse, RoomListResponse, RoomMessageResponse,
}; };
@ -11,6 +13,7 @@ use crate::handlers::{
}; };
use crate::message_handler::MessageHandler; use crate::message_handler::MessageHandler;
/// An event affecting the chat room module.
#[derive(Debug, PartialEq, Eq)] #[derive(Debug, PartialEq, Eq)]
pub enum RoomEvent { pub enum RoomEvent {
JoinRequest(String), JoinRequest(String),
@ -21,7 +24,11 @@ pub enum RoomEvent {
MessageResponse(RoomMessageResponse), MessageResponse(RoomMessageResponse),
} }
/// An interface for room event handlers.
///
/// Allows mocking of handlers in tests.
pub trait HandleRoomEvent { pub trait HandleRoomEvent {
/// Handles the given `event` against the given global `context`.
fn handle( fn handle(
&mut self, &mut self,
context: &mut Context, context: &mut Context,
@ -29,6 +36,7 @@ pub trait HandleRoomEvent {
) -> anyhow::Result<()>; ) -> anyhow::Result<()>;
} }
/// The real, default implementation of `HandleRoomEvent`.
#[derive(Default)] #[derive(Default)]
pub struct RoomEventHandler; pub struct RoomEventHandler;


+ 4
- 11
client/src/room/map.rs View File

@ -1,3 +1,6 @@
//! This module defines abstractions for handling the global set of rooms and
//! their state.
use std::collections::HashMap; use std::collections::HashMap;
use std::mem; use std::mem;
@ -7,16 +10,6 @@ use thiserror::Error;
use crate::room::{RoomMembership, RoomMessage, RoomState, RoomVisibility}; use crate::room::{RoomMembership, RoomMessage, RoomState, RoomVisibility};
/// The error returned by RoomMap functions.
#[derive(Debug, Error)]
pub enum RoomError {
#[error(transparent)]
RoomNotFound(#[from] RoomNotFoundError),
#[error(transparent)]
MembershipChangeInvalid(#[from] RoomMembershipChangeError),
}
#[derive(Debug, Error)] #[derive(Debug, Error)]
#[error("cannot change membership from {0:?} to {1:?}")] #[error("cannot change membership from {0:?} to {1:?}")]
pub struct RoomMembershipChangeError(RoomMembership, RoomMembership); pub struct RoomMembershipChangeError(RoomMembership, RoomMembership);
@ -162,7 +155,7 @@ impl RoomMap {
self self
.map .map
.insert(name.clone(), RoomEntry::new(name, room)) .insert(name.clone(), RoomEntry::new(name, room))
.map(|entry| entry.state)
.map(|entry| entry.into_state())
} }
/// Looks up the given room name in the map, returning an immutable /// Looks up the given room name in the map, returning an immutable


+ 3
- 0
client/src/room/state.rs View File

@ -1,3 +1,6 @@
//! This module defines the data structures used for room state storage and
//! serialization.
use std::collections::HashSet; use std::collections::HashSet;
use std::time::SystemTime; use std::time::SystemTime;


Loading…
Cancel
Save