|
|
|
@ -10,13 +10,17 @@ use crate::room::{Membership, Room, Visibility}; |
|
|
|
/// The error returned by RoomMap functions.
|
|
|
|
#[derive(Debug, Error)]
|
|
|
|
pub enum RoomError {
|
|
|
|
#[error("room {0} not found")]
|
|
|
|
RoomNotFound(String),
|
|
|
|
#[error(transparent)]
|
|
|
|
RoomNotFound(#[from] RoomNotFoundError),
|
|
|
|
|
|
|
|
#[error("cannot change membership from {0:?} to {1:?}")]
|
|
|
|
MembershipChangeInvalid(Membership, Membership),
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, Error)]
|
|
|
|
#[error("room {0} not found")]
|
|
|
|
pub struct RoomNotFoundError(String);
|
|
|
|
|
|
|
|
/// Contains the mapping from room names to room data and provides a clean
|
|
|
|
/// interface to interact with it.
|
|
|
|
#[derive(Debug, Default)]
|
|
|
|
@ -39,10 +43,13 @@ impl RoomMap { |
|
|
|
|
|
|
|
/// Looks up the given room name in the map, returning an immutable
|
|
|
|
/// reference to the associated data if found, or an error if not found.
|
|
|
|
pub fn get_strict(&self, room_name: &str) -> Result<&Room, RoomError> {
|
|
|
|
pub fn get_strict(
|
|
|
|
&self,
|
|
|
|
room_name: &str,
|
|
|
|
) -> Result<&Room, RoomNotFoundError> {
|
|
|
|
match self.map.get(room_name) {
|
|
|
|
Some(room) => Ok(room),
|
|
|
|
None => Err(RoomError::RoomNotFound(room_name.to_string())),
|
|
|
|
None => Err(RoomNotFoundError(room_name.to_string())),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@ -51,10 +58,10 @@ impl RoomMap { |
|
|
|
pub fn get_mut_strict(
|
|
|
|
&mut self,
|
|
|
|
room_name: &str,
|
|
|
|
) -> Result<&mut Room, RoomError> {
|
|
|
|
) -> Result<&mut Room, RoomNotFoundError> {
|
|
|
|
match self.map.get_mut(room_name) {
|
|
|
|
Some(room) => Ok(room),
|
|
|
|
None => Err(RoomError::RoomNotFound(room_name.to_string())),
|
|
|
|
None => Err(RoomNotFoundError(room_name.to_string())),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|