diff --git a/src/room.rs b/src/room.rs index eee3240..d2e3e78 100644 --- a/src/room.rs +++ b/src/room.rs @@ -34,7 +34,7 @@ pub enum Visibility { /// This structure contains the last known information about a chat room. /// It does not store the name, as that is stored implicitly as the key in the /// room hash table. -#[derive(Clone, Copy, Debug, RustcDecodable, RustcEncodable)] +#[derive(Clone, Debug, RustcDecodable, RustcEncodable)] pub struct Room { /// The membership state of the user for the room. pub membership: Membership, @@ -45,9 +45,28 @@ pub struct Room { pub operated: bool, /// The number of users that are members of the room. pub user_count: usize, + /// The name of the room's owner, if any. + pub owner: Option, + /// The names of the room's operators. + pub operators: Vec, + /// The names of the room's members. + pub members: Vec, } impl Room { + /// Creates a new room with the given visibility and user count. + fn new(visibility: Visibility, user_count: usize) -> Self { + Room { + membership: Membership::NonMember, + visibility: visibility, + operated: false, + user_count: user_count, + owner: None, + operators: Vec::new(), + members: Vec::new(), + } + } + /// Merges the previous version of the room's information into the new /// version. fn merge(&mut self, old_room: &Self) { @@ -104,34 +123,21 @@ impl RoomMap { // Add all public rooms. for (name, user_count) in response.rooms.drain(..) { - let new_room = Room { - membership: Membership::NonMember, - visibility: Visibility::Public, - operated: false, - user_count: user_count as usize, - }; + let new_room = Room::new(Visibility::Public, user_count as usize); self.update_one(name, new_room, &old_map); } // Add all private, owned, rooms. for (name, user_count) in response.owned_private_rooms.drain(..) { - let new_room = Room { - membership: Membership::NonMember, - visibility: Visibility::PrivateOwned, - operated: false, - user_count: user_count as usize, - }; + let new_room = Room::new( + Visibility::PrivateOwned, user_count as usize); self.update_one(name, new_room, &old_map); } // Add all private, unowned, rooms. for (name, user_count) in response.other_private_rooms.drain(..) { - let new_room = Room { - membership: Membership::NonMember, - visibility: Visibility::PrivateOther, - operated: false, - user_count: user_count as usize, - }; + let new_room = Room::new( + Visibility::PrivateOther, user_count as usize); self.update_one(name, new_room, &old_map); }