From 97e8874f8c7d21493ce58d65ddff2416ffc023df Mon Sep 17 00:00:00 2001 From: Titouan Rigoudy Date: Tue, 3 May 2016 13:20:12 +0200 Subject: [PATCH] Add get_strict and get_mut_strict to Room. --- src/room.rs | 68 ++++++++++++++++++++--------------------------------- 1 file changed, 25 insertions(+), 43 deletions(-) diff --git a/src/room.rs b/src/room.rs index 8d22a5b..1accf95 100644 --- a/src/room.rs +++ b/src/room.rs @@ -128,15 +128,21 @@ impl RoomMap { } /// Looks up the given room name in the map, returning an immutable - /// reference to the associated data if found. - pub fn get(&self, name: &str) -> Option<&Room> { - self.map.get(name) + /// reference to the associated data if found, or an error if not found. + fn get_strict(&self, room_name: &str) -> Result<&Room, Error> { + match self.map.get(room_name) { + Some(room) => Ok(room), + None => Err(Error::RoomNotFound(room_name.to_string())) + } } /// Looks up the given room name in the map, returning a mutable - /// reference to the associated data if found. - pub fn get_mut(&mut self, name: &str) -> Option<&mut Room> { - self.map.get_mut(name) + /// reference to the associated data if found, or an error if not found. + fn get_mut_strict(&mut self, room_name: &str) -> Result<&mut Room, Error> { + match self.map.get_mut(room_name) { + Some(room) => Ok(room), + None => Err(Error::RoomNotFound(room_name.to_string())) + } } /// Updates one room in the map based on the information received in @@ -208,10 +214,7 @@ impl RoomMap { pub fn start_joining(&mut self, room_name: &str) -> Result<(), Error> { - let room = match self.map.get_mut(room_name) { - Some(room) => room, - None => return Err(Error::RoomNotFound(room_name.to_string())) - }; + let room = try!(self.get_mut_strict(room_name)); match room.membership { Membership::NonMember => { @@ -237,10 +240,7 @@ impl RoomMap { -> Result<(), Error> { // First look up the room struct. - let room = match self.map.get_mut(room_name) { - Some(room) => room, - None => return Err(Error::RoomNotFound(room_name.to_string())) - }; + let room = try!(self.get_mut_strict(room_name)); // Log what's happening. if let Membership::Joining = room.membership { @@ -276,10 +276,7 @@ impl RoomMap { pub fn start_leaving(&mut self, room_name: &str) -> Result<(), Error> { - let room = match self.map.get_mut(room_name) { - Some(room) => room, - None => return Err(Error::RoomNotFound(room_name.to_string())) - }; + let room = try!(self.get_mut_strict(room_name)); match room.membership { Membership::Member => { @@ -297,10 +294,7 @@ impl RoomMap { /// Records that we have now left the given room. pub fn leave(&mut self, room_name: &str) -> Result<(), Error> { - let room = match self.map.get_mut(room_name) { - Some(room) => room, - None => return Err(Error::RoomNotFound(room_name.to_string())) - }; + let room = try!(self.get_mut_strict(room_name)); match room.membership { Membership::Leaving => info!("Left room {:?}", room_name), @@ -319,13 +313,9 @@ impl RoomMap { pub fn add_message(&mut self, room_name: &str, message: Message) -> Result<(), Error> { - match self.map.get_mut(room_name) { - Some(room) => { - room.messages.push(message); - Ok(()) - }, - None => Err(Error::RoomNotFound(room_name.to_string())), - } + let room = try!(self.get_mut_strict(room_name)); + room.messages.push(message); + Ok(()) } /// Inserts the given user in the given room's set of members. @@ -333,13 +323,9 @@ impl RoomMap { pub fn insert_member(&mut self, room_name: &str, user_name: String) -> Result<(), Error> { - match self.map.get_mut(room_name) { - Some(room) => { - room.members.insert(user_name); - Ok(()) - }, - None => Err(Error::RoomNotFound(room_name.to_string())), - } + let room = try!(self.get_mut_strict(room_name)); + room.members.insert(user_name); + Ok(()) } /// Removes the given user from the given room's set of members. @@ -347,13 +333,9 @@ impl RoomMap { pub fn remove_member(&mut self, room_name: &str, user_name: &str) -> Result<(), Error> { - match self.map.get_mut(room_name) { - Some(room) => { - room.members.remove(user_name); - Ok(()) - }, - None => Err(Error::RoomNotFound(room_name.to_string())) - } + let room = try!(self.get_mut_strict(room_name)); + room.members.remove(user_name); + Ok(()) } }