diff --git a/src/proto/server/response.rs b/src/proto/server/response.rs index 244933e..a4ed9c7 100644 --- a/src/proto/server/response.rs +++ b/src/proto/server/response.rs @@ -141,6 +141,10 @@ impl ProtoEncode for ServerResponse { encoder.encode_u32(CODE_ROOM_LIST)?; response.encode(encoder)?; } + ServerResponse::RoomMessageResponse(ref response) => { + encoder.encode_u32(CODE_ROOM_MESSAGE)?; + response.encode(encoder)?; + } _ => { unimplemented!(); } @@ -193,6 +197,10 @@ impl ProtoDecode for ServerResponse { let response = RoomListResponse::decode(decoder)?; ServerResponse::RoomListResponse(response) } + CODE_ROOM_MESSAGE => { + let response = RoomMessageResponse::decode(decoder)?; + ServerResponse::RoomMessageResponse(response) + } _ => { return Err(DecodeError::UnknownCodeError(code)); } @@ -968,6 +976,27 @@ impl ReadFromPacket for RoomMessageResponse { } } +impl ProtoEncode for RoomMessageResponse { + fn encode(&self, encoder: &mut ProtoEncoder) -> io::Result<()> { + encoder.encode_string(&self.room_name)?; + encoder.encode_string(&self.user_name)?; + encoder.encode_string(&self.message) + } +} + +impl ProtoDecode for RoomMessageResponse { + fn decode(decoder: &mut ProtoDecoder) -> Result { + let room_name = decoder.decode_string()?; + let user_name = decoder.decode_string()?; + let message = decoder.decode_string()?; + Ok(Self { + room_name: room_name, + user_name: user_name, + message: message, + }) + } +} + /*==============* * ROOM MESSAGE * *==============*/ @@ -1282,4 +1311,13 @@ mod tests { operated_private_room_names: vec!["brown".to_string(), "pink".to_string()], })) } + + #[test] + fn roundtrip_room_message() { + roundtrip(ServerResponse::RoomMessageResponse(RoomMessageResponse { + room_name: "red".to_string(), + user_name: "alice".to_string(), + message: "hello world!".to_string(), + })) + } }