diff --git a/src/proto/server.rs b/src/proto/server.rs index 1f33070..9f166ce 100644 --- a/src/proto/server.rs +++ b/src/proto/server.rs @@ -18,16 +18,19 @@ pub enum ServerRequest { impl ServerRequest { pub fn to_packet(&self) -> io::Result { - match *self { - ServerRequest::LoginRequest(ref request) => { - let mut packet = Packet::new(CODE_LOGIN); - try!(request.write_to_packet(&mut packet)); - Ok(packet) - }, - } + let (mut packet, request): (Packet, &WriteToPacket) = match *self { + ServerRequest::LoginRequest(ref request) => + (Packet::new(CODE_LOGIN), request), + }; + try!(request.write_to_packet(&mut packet)); + Ok(packet) } } +trait WriteToPacket { + fn write_to_packet(&self, &mut Packet) -> io::Result<()>; +} + pub enum ServerResponse { LoginResponse(LoginResponse), UnknownResponse(u32, Packet), @@ -72,8 +75,10 @@ impl LoginRequest { Err("Empty password") } } +} - pub fn write_to_packet(&self, packet: &mut Packet) -> io::Result<()> { +impl WriteToPacket for LoginRequest { + fn write_to_packet(&self, packet: &mut Packet) -> io::Result<()> { let userpass = String::new() + &self.username + &self.password; let userpass_md5 = md5_str(&userpass);