|
|
|
@ -5,7 +5,7 @@ use log::{error, info, warn}; |
|
|
|
use solstice_proto::{server, User};
|
|
|
|
use thiserror::Error;
|
|
|
|
|
|
|
|
use crate::room::{Membership, RoomState, Visibility};
|
|
|
|
use crate::room::{RoomMembership, RoomState, Visibility};
|
|
|
|
|
|
|
|
/// The error returned by RoomMap functions.
|
|
|
|
#[derive(Debug, Error)]
|
|
|
|
@ -14,7 +14,7 @@ pub enum RoomError { |
|
|
|
RoomNotFound(#[from] RoomNotFoundError),
|
|
|
|
|
|
|
|
#[error("cannot change membership from {0:?} to {1:?}")]
|
|
|
|
MembershipChangeInvalid(Membership, Membership),
|
|
|
|
MembershipChangeInvalid(RoomMembership, RoomMembership),
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, Error)]
|
|
|
|
@ -133,14 +133,14 @@ impl RoomMap { |
|
|
|
let room = self.get_mut_strict(room_name)?;
|
|
|
|
|
|
|
|
match room.membership {
|
|
|
|
Membership::NonMember => {
|
|
|
|
room.membership = Membership::Joining;
|
|
|
|
RoomMembership::NonMember => {
|
|
|
|
room.membership = RoomMembership::Joining;
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
membership => Err(RoomError::MembershipChangeInvalid(
|
|
|
|
membership,
|
|
|
|
Membership::Joining,
|
|
|
|
RoomMembership::Joining,
|
|
|
|
)),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -158,7 +158,7 @@ impl RoomMap { |
|
|
|
let room = self.get_mut_strict(room_name)?;
|
|
|
|
|
|
|
|
// Log what's happening.
|
|
|
|
if let Membership::Joining = room.membership {
|
|
|
|
if let RoomMembership::Joining = room.membership {
|
|
|
|
info!("Joined room {:?}", room_name);
|
|
|
|
} else {
|
|
|
|
warn!(
|
|
|
|
@ -168,7 +168,7 @@ impl RoomMap { |
|
|
|
}
|
|
|
|
|
|
|
|
// Update the room struct.
|
|
|
|
room.membership = Membership::Member;
|
|
|
|
room.membership = RoomMembership::Member;
|
|
|
|
room.user_count = members.len();
|
|
|
|
room.owner = owner;
|
|
|
|
|
|
|
|
@ -193,14 +193,14 @@ impl RoomMap { |
|
|
|
let room = self.get_mut_strict(room_name)?;
|
|
|
|
|
|
|
|
match room.membership {
|
|
|
|
Membership::Member => {
|
|
|
|
room.membership = Membership::Leaving;
|
|
|
|
RoomMembership::Member => {
|
|
|
|
room.membership = RoomMembership::Leaving;
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
membership => Err(RoomError::MembershipChangeInvalid(
|
|
|
|
membership,
|
|
|
|
Membership::Leaving,
|
|
|
|
RoomMembership::Leaving,
|
|
|
|
)),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -210,7 +210,7 @@ impl RoomMap { |
|
|
|
let room = self.get_mut_strict(room_name)?;
|
|
|
|
|
|
|
|
match room.membership {
|
|
|
|
Membership::Leaving => info!("Left room {:?}", room_name),
|
|
|
|
RoomMembership::Leaving => info!("Left room {:?}", room_name),
|
|
|
|
|
|
|
|
membership => warn!(
|
|
|
|
"Left room {:?} with wrong membership: {:?}",
|
|
|
|
@ -218,7 +218,7 @@ impl RoomMap { |
|
|
|
),
|
|
|
|
}
|
|
|
|
|
|
|
|
room.membership = Membership::NonMember;
|
|
|
|
room.membership = RoomMembership::NonMember;
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
@ -268,7 +268,7 @@ mod tests { |
|
|
|
use solstice_proto::server::RoomListResponse;
|
|
|
|
|
|
|
|
use crate::room::{
|
|
|
|
Membership, Message, MessageHistory, RoomState, Visibility,
|
|
|
|
Message, MessageHistory, RoomMembership, RoomState, Visibility,
|
|
|
|
};
|
|
|
|
|
|
|
|
use super::RoomMap;
|
|
|
|
@ -276,8 +276,8 @@ mod tests { |
|
|
|
#[test]
|
|
|
|
fn deserialize_membership() {
|
|
|
|
assert_eq!(
|
|
|
|
serde_json::from_str::<Membership>(r#""Member""#).unwrap(),
|
|
|
|
Membership::Member
|
|
|
|
serde_json::from_str::<RoomMembership>(r#""Member""#).unwrap(),
|
|
|
|
RoomMembership::Member
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
@ -339,7 +339,7 @@ mod tests { |
|
|
|
)
|
|
|
|
.unwrap(),
|
|
|
|
RoomState {
|
|
|
|
membership: Membership::Joining,
|
|
|
|
membership: RoomMembership::Joining,
|
|
|
|
visibility: Visibility::PrivateOwned,
|
|
|
|
operated: false,
|
|
|
|
user_count: 3,
|
|
|
|
|