From d3ce706db688c1a395868fe47d5a4c9ac58a71ca Mon Sep 17 00:00:00 2001 From: Titouan Rigoudy Date: Sun, 7 Jan 2018 06:44:15 -0500 Subject: [PATCH] Implement Proto{De,En}code for UserStatusResponse. --- src/proto/server/response.rs | 38 ++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/proto/server/response.rs b/src/proto/server/response.rs index 3cfcf50..720e4a6 100644 --- a/src/proto/server/response.rs +++ b/src/proto/server/response.rs @@ -161,6 +161,10 @@ impl ProtoEncode for ServerResponse { encoder.encode_u32(CODE_USER_INFO)?; response.encode(encoder)?; } + ServerResponse::UserStatusResponse(ref response) => { + encoder.encode_u32(CODE_USER_STATUS)?; + response.encode(encoder)?; + } _ => { unimplemented!(); } @@ -233,6 +237,10 @@ impl ProtoDecode for ServerResponse { let response = UserInfoResponse::decode(decoder)?; ServerResponse::UserInfoResponse(response) } + CODE_USER_STATUS => { + let response = UserStatusResponse::decode(decoder)?; + ServerResponse::UserStatusResponse(response) + } _ => { return Err(DecodeError::UnknownCodeError(code)); } @@ -1261,6 +1269,27 @@ impl ReadFromPacket for UserStatusResponse { } } +impl ProtoEncode for UserStatusResponse { + fn encode(&self, encoder: &mut ProtoEncoder) -> io::Result<()> { + encoder.encode_string(&self.user_name)?; + self.status.encode(encoder)?; + encoder.encode_bool(self.is_privileged) + } +} + +impl ProtoDecode for UserStatusResponse { + fn decode(decoder: &mut ProtoDecoder) -> Result { + let user_name = decoder.decode_string()?; + let status = UserStatus::decode(decoder)?; + let is_privileged = decoder.decode_bool()?; + Ok(Self { + user_name, + status, + is_privileged, + }) + } +} + /*===================* * WISHLIST INTERVAL * *===================*/ @@ -1487,4 +1516,13 @@ mod tests { num_folders: 1003, })) } + + #[test] + fn roundtrip_user_status() { + roundtrip(ServerResponse::UserStatusResponse(UserStatusResponse { + user_name: "alice".to_string(), + status: UserStatus::Offline, + is_privileged: true, + })) + } }