diff --git a/src/proto/server/response.rs b/src/proto/server/response.rs index a4ed9c7..edee7e6 100644 --- a/src/proto/server/response.rs +++ b/src/proto/server/response.rs @@ -145,6 +145,10 @@ impl ProtoEncode for ServerResponse { encoder.encode_u32(CODE_ROOM_MESSAGE)?; response.encode(encoder)?; } + ServerResponse::RoomTickersResponse(ref response) => { + encoder.encode_u32(CODE_ROOM_TICKERS)?; + response.encode(encoder)?; + } _ => { unimplemented!(); } @@ -201,6 +205,10 @@ impl ProtoDecode for ServerResponse { let response = RoomMessageResponse::decode(decoder)?; ServerResponse::RoomMessageResponse(response) } + CODE_ROOM_TICKERS => { + let response = RoomTickersResponse::decode(decoder)?; + ServerResponse::RoomTickersResponse(response) + } _ => { return Err(DecodeError::UnknownCodeError(code)); } @@ -998,7 +1006,7 @@ impl ProtoDecode for RoomMessageResponse { } /*==============* - * ROOM MESSAGE * + * ROOM TICKERS * *==============*/ #[derive(Debug, Eq, PartialEq)] @@ -1026,6 +1034,24 @@ impl ReadFromPacket for RoomTickersResponse { } } +impl ProtoEncode for RoomTickersResponse { + fn encode(&self, encoder: &mut ProtoEncoder) -> io::Result<()> { + encoder.encode_string(&self.room_name)?; + encoder.encode_vec(&self.tickers) + } +} + +impl ProtoDecode for RoomTickersResponse { + fn decode(decoder: &mut ProtoDecoder) -> Result { + let room_name = decoder.decode_string()?; + let tickers = decoder.decode_vec::<(String, String)>()?; + Ok(Self { + room_name: room_name, + tickers: tickers, + }) + } +} + /*==================* * ROOM USER JOINED * *==================*/ @@ -1320,4 +1346,15 @@ mod tests { message: "hello world!".to_string(), })) } + + #[test] + fn roundtrip_room_tickers() { + roundtrip(ServerResponse::RoomTickersResponse(RoomTickersResponse { + room_name: "red".to_string(), + tickers: vec![ + ("alice".to_string(), "hello world!".to_string()), + ("bob".to_string(), "hi alice :)".to_string()), + ], + })) + } }