Browse Source

Improve UserStatusMap ergonomics.

wip
Titouan Rigoudy 4 years ago
parent
commit
883d81e092
2 changed files with 14 additions and 13 deletions
  1. +1
    -3
      src/proto/server/client.rs
  2. +13
    -10
      src/proto/server/testing.rs

+ 1
- 3
src/proto/server/client.rs View File

@ -219,9 +219,7 @@ mod tests {
}; };
let mut user_status_map = UserStatusMap::default(); 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, handle) = fake_server().await.unwrap();
let server = server.with_user_status_map(user_status_map); let server = server.with_user_status_map(user_status_map);


+ 13
- 10
src/proto/server/testing.rs View File

@ -18,11 +18,20 @@ use crate::proto::server::{
#[derive(Debug, Default)] #[derive(Debug, Default)]
pub struct UserStatusMap { pub struct UserStatusMap {
pub map: HashMap<String, UserStatusResponse>,
map: HashMap<String, UserStatusResponse>,
} }
// TODO: fn insert(&self, UserStatusResponse), since response contains username.
// TODO: fn get(&self) -> Option<UserStatusResponse> (returns cloned)
// IDEA: impl FromIterator<UserStatusResponse> 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<UserStatusResponse> {
self.map.get(user_name).map(|response| response.clone())
}
}
// TODO: Derive Debug? // TODO: Derive Debug?
struct Handler { struct Handler {
@ -71,13 +80,7 @@ impl Handler {
info!("Handler: received request: {:?}", request); info!("Handler: received request: {:?}", request);
match request { match request {
ServerRequest::UserStatusRequest(UserStatusRequest { user_name }) => { 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 { if let Some(response) = entry {
let response = ServerResponse::UserStatusResponse(response); let response = ServerResponse::UserStatusResponse(response);
self.frame_stream.write(&response).await?; self.frame_stream.write(&response).await?;


Loading…
Cancel
Save