From 883d81e092478d42846b906dcf8c22d47f87371f Mon Sep 17 00:00:00 2001 From: Titouan Rigoudy Date: Sat, 23 Jan 2021 11:43:41 +0100 Subject: [PATCH] Improve UserStatusMap ergonomics. --- src/proto/server/client.rs | 4 +--- src/proto/server/testing.rs | 23 +++++++++++++---------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/proto/server/client.rs b/src/proto/server/client.rs index 9733772..1ffa69b 100644 --- a/src/proto/server/client.rs +++ b/src/proto/server/client.rs @@ -219,9 +219,7 @@ mod tests { }; let mut user_status_map = UserStatusMap::default(); - user_status_map - .map - .insert("alice".to_string(), response.clone()); + user_status_map.insert(response.clone()); let (server, handle) = fake_server().await.unwrap(); let server = server.with_user_status_map(user_status_map); diff --git a/src/proto/server/testing.rs b/src/proto/server/testing.rs index 5c7926a..9818093 100644 --- a/src/proto/server/testing.rs +++ b/src/proto/server/testing.rs @@ -18,11 +18,20 @@ use crate::proto::server::{ #[derive(Debug, Default)] pub struct UserStatusMap { - pub map: HashMap, + map: HashMap, } -// TODO: fn insert(&self, UserStatusResponse), since response contains username. -// TODO: fn get(&self) -> Option (returns cloned) +// IDEA: impl FromIterator for UserStatusMap. + +impl UserStatusMap { + pub fn insert(&mut self, response: UserStatusResponse) { + self.map.insert(response.user_name.clone(), response); + } + + pub fn get(&self, user_name: &str) -> Option { + self.map.get(user_name).map(|response| response.clone()) + } +} // TODO: Derive Debug? struct Handler { @@ -71,13 +80,7 @@ impl Handler { info!("Handler: received request: {:?}", request); match request { ServerRequest::UserStatusRequest(UserStatusRequest { user_name }) => { - // TODO: Better interface to UserStatusMap. - let entry = self - .user_status_map - .lock() - .map - .get(&user_name) - .map(|response| response.clone()); + let entry = self.user_status_map.lock().get(&user_name); if let Some(response) = entry { let response = ServerResponse::UserStatusResponse(response); self.frame_stream.write(&response).await?;