diff --git a/src/proto/server/response.rs b/src/proto/server/response.rs index f4cd0d6..04fbde9 100644 --- a/src/proto/server/response.rs +++ b/src/proto/server/response.rs @@ -126,6 +126,10 @@ impl ProtoEncode for ServerResponse { encoder.encode_u32(CODE_PEER_ADDRESS)?; response.encode(encoder)?; }, + ServerResponse::PrivilegedUsersResponse(ref response) => { + encoder.encode_u32(CODE_PRIVILEGED_USERS)?; + response.encode(encoder)?; + }, _ => { unimplemented!(); }, @@ -162,6 +166,10 @@ impl ProtoDecode for ServerResponse { let response = PeerAddressResponse::decode(decoder)?; ServerResponse::PeerAddressResponse(response) }, + CODE_PRIVILEGED_USERS => { + let response = PrivilegedUsersResponse::decode(decoder)?; + ServerResponse::PrivilegedUsersResponse(response) + }, _ => { return Err(DecodeError::UnknownCodeError(code)); }, @@ -472,7 +480,6 @@ impl ProtoDecode for PeerAddressResponse { } } - /*==================* * PRIVILEGED USERS * *==================*/ @@ -489,6 +496,21 @@ impl ReadFromPacket for PrivilegedUsersResponse { } } +impl ProtoEncode for PrivilegedUsersResponse { + fn encode(&self, encoder: &mut ProtoEncoder) -> Result<(), io::Error> { + encoder.encode_vec(&self.users) + } +} + +impl ProtoDecode for PrivilegedUsersResponse { + fn decode(decoder: &mut ProtoDecoder) -> Result { + let users = decoder.decode_vec::()?; + Ok(Self { + users: users, + }) + } +} + /*===========* * ROOM JOIN * *===========*/ @@ -926,4 +948,15 @@ mod tests { port: 1337, })) } + + #[test] + fn roundtrip_privileged_users() { + roundtrip(ServerResponse::PrivilegedUsersResponse(PrivilegedUsersResponse { + users: vec![ + "alice".to_string(), + "bob".to_string(), + "chris".to_string(), + ], + })) + } }