diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 0000000..df99c69 --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1 @@ +max_width = 80 diff --git a/src/client.rs b/src/client.rs index c7224ca..9d87921 100644 --- a/src/client.rs +++ b/src/client.rs @@ -114,7 +114,9 @@ impl Client { loop { match self.recv() { - IncomingMessage::Proto(response) => self.handle_proto_response(response), + IncomingMessage::Proto(response) => { + self.handle_proto_response(response) + } IncomingMessage::ControlNotification(notif) => { self.handle_control_notification(notif) @@ -186,7 +188,9 @@ impl Client { self.control_tx = None; } - control::Notification::Request(req) => self.handle_control_request(req), + control::Notification::Request(req) => { + self.handle_control_request(req) + } } } @@ -196,7 +200,9 @@ impl Client { fn handle_control_request(&mut self, request: control::Request) { match request { - control::Request::LoginStatusRequest => self.handle_login_status_request(), + control::Request::LoginStatusRequest => { + self.handle_login_status_request() + } control::Request::RoomJoinRequest(room_name) => { self.handle_room_join_request(room_name) @@ -206,13 +212,17 @@ impl Client { self.handle_room_leave_request(room_name) } - control::Request::RoomListRequest => self.handle_room_list_request(), + control::Request::RoomListRequest => { + self.handle_room_list_request() + } control::Request::RoomMessageRequest(request) => { self.handle_room_message_request(request) } - control::Request::UserListRequest => self.handle_user_list_request(), + control::Request::UserListRequest => { + self.handle_user_list_request() + } /* _ =>{ error!("Unhandled control request: {:?}", request); @@ -225,22 +235,30 @@ impl Client { let username = config::USERNAME.to_string(); let response = match self.login_status { - LoginStatus::Todo => control::LoginStatusResponse::Pending { username: username }, + LoginStatus::Todo => { + control::LoginStatusResponse::Pending { username: username } + } LoginStatus::AwaitingResponse => { control::LoginStatusResponse::Pending { username: username } } - LoginStatus::Success(ref motd) => control::LoginStatusResponse::Success { - username: username, - motd: motd.clone(), - }, + LoginStatus::Success(ref motd) => { + control::LoginStatusResponse::Success { + username: username, + motd: motd.clone(), + } + } - LoginStatus::Failure(ref reason) => control::LoginStatusResponse::Failure { - username: username, - reason: reason.clone(), - }, + LoginStatus::Failure(ref reason) => { + control::LoginStatusResponse::Failure { + username: username, + reason: reason.clone(), + } + } }; - self.send_to_controller(control::Response::LoginStatusResponse(response)); + self.send_to_controller(control::Response::LoginStatusResponse( + response, + )); } fn handle_room_join_request(&mut self, room_name: String) { @@ -284,7 +302,10 @@ impl Client { self.send_to_server(server::ServerRequest::RoomListRequest); } - fn handle_room_message_request(&mut self, request: control::RoomMessageRequest) { + fn handle_room_message_request( + &mut self, + request: control::RoomMessageRequest, + ) { self.send_to_server(server::ServerRequest::RoomMessageRequest( server::RoomMessageRequest { room_name: request.room_name, @@ -363,11 +384,13 @@ impl Client { #[allow(deprecated)] self.proto_tx .send(proto::Request::ServerRequest( - server::ServerRequest::ConnectToPeerRequest(server::ConnectToPeerRequest { - token: peer.token, - user_name: peer.user_name.clone(), - connection_type: peer.connection_type.clone(), - }), + server::ServerRequest::ConnectToPeerRequest( + server::ConnectToPeerRequest { + token: peer.token, + user_name: peer.user_name.clone(), + connection_type: peer.connection_type.clone(), + }, + ), )) .unwrap(); } @@ -382,10 +405,12 @@ impl Client { #[allow(deprecated)] self.proto_tx .send(proto::Request::ServerRequest( - server::ServerRequest::CannotConnectRequest(server::CannotConnectRequest { - token: peer.token, - user_name: peer.user_name, - }), + server::ServerRequest::CannotConnectRequest( + server::CannotConnectRequest { + token: peer.token, + user_name: peer.user_name, + }, + ), )) .unwrap(); } @@ -407,7 +432,10 @@ impl Client { .. }, ) => { - error!("Peer connection {} was already open: {:?}", peer_id, peer); + error!( + "Peer connection {} was already open: {:?}", + peer_id, peer + ); return; } @@ -471,7 +499,9 @@ impl Client { self.handle_connect_to_peer_response(response) } - server::ServerResponse::LoginResponse(response) => self.handle_login_response(response), + server::ServerResponse::LoginResponse(response) => { + self.handle_login_response(response) + } server::ServerResponse::PrivilegedUsersResponse(response) => { self.handle_privileged_users_response(response) @@ -521,7 +551,10 @@ impl Client { } } - fn handle_connect_to_peer_response(&mut self, response: server::ConnectToPeerResponse) { + fn handle_connect_to_peer_response( + &mut self, + response: server::ConnectToPeerResponse, + ) { let peer = Peer { user_name: response.user_name, ip: response.ip, @@ -596,11 +629,17 @@ impl Client { } } - fn handle_privileged_users_response(&mut self, response: server::PrivilegedUsersResponse) { + fn handle_privileged_users_response( + &mut self, + response: server::PrivilegedUsersResponse, + ) { self.users.set_all_privileged(response.users); } - fn handle_room_join_response(&mut self, mut response: server::RoomJoinResponse) { + fn handle_room_join_response( + &mut self, + mut response: server::RoomJoinResponse, + ) { // Join the room and store the received information. let result = self.rooms.join( &response.room_name, @@ -621,10 +660,15 @@ impl Client { let control_response = control::RoomJoinResponse { room_name: response.room_name, }; - self.send_to_controller(control::Response::RoomJoinResponse(control_response)); + self.send_to_controller(control::Response::RoomJoinResponse( + control_response, + )); } - fn handle_room_leave_response(&mut self, response: server::RoomLeaveResponse) { + fn handle_room_leave_response( + &mut self, + response: server::RoomLeaveResponse, + ) { if let Err(err) = self.rooms.leave(&response.room_name) { error!("RoomLeaveResponse: {}", err); } @@ -636,7 +680,10 @@ impl Client { )); } - fn handle_room_list_response(&mut self, response: server::RoomListResponse) { + fn handle_room_list_response( + &mut self, + response: server::RoomListResponse, + ) { // Update the room map in memory. self.rooms.set_room_list(response); // Send the updated version to the controller. @@ -646,7 +693,10 @@ impl Client { )); } - fn handle_room_message_response(&mut self, response: server::RoomMessageResponse) { + fn handle_room_message_response( + &mut self, + response: server::RoomMessageResponse, + ) { let result = self.rooms.add_message( &response.room_name, room::Message { @@ -668,7 +718,10 @@ impl Client { )); } - fn handle_room_tickers_response(&mut self, response: server::RoomTickersResponse) { + fn handle_room_tickers_response( + &mut self, + response: server::RoomTickersResponse, + ) { let result = self .rooms .set_tickers(&response.room_name, response.tickers); @@ -677,7 +730,10 @@ impl Client { } } - fn handle_room_user_joined_response(&mut self, response: server::RoomUserJoinedResponse) { + fn handle_room_user_joined_response( + &mut self, + response: server::RoomUserJoinedResponse, + ) { let result = self .rooms .insert_member(&response.room_name, response.user.name.clone()); @@ -693,7 +749,10 @@ impl Client { )); } - fn handle_room_user_left_response(&mut self, response: server::RoomUserLeftResponse) { + fn handle_room_user_left_response( + &mut self, + response: server::RoomUserLeftResponse, + ) { let result = self .rooms .remove_member(&response.room_name, &response.user_name); @@ -709,7 +768,10 @@ impl Client { )); } - fn handle_user_info_response(&mut self, response: server::UserInfoResponse) { + fn handle_user_info_response( + &mut self, + response: server::UserInfoResponse, + ) { let c_response = match self.users.get_mut_strict(&response.user_name) { Ok(user) => { user.average_speed = response.average_speed; @@ -726,11 +788,17 @@ impl Client { return; } }; - self.send_to_controller(control::Response::UserInfoResponse(c_response)); + self.send_to_controller(control::Response::UserInfoResponse( + c_response, + )); } - fn handle_user_status_response(&mut self, response: server::UserStatusResponse) { - let result = self.users.set_status(&response.user_name, response.status); + fn handle_user_status_response( + &mut self, + response: server::UserStatusResponse, + ) { + let result = + self.users.set_status(&response.user_name, response.status); if let Err(err) = result { error!("UserStatusResponse: {}", err); return; diff --git a/src/control/ws.rs b/src/control/ws.rs index d983191..483b4f4 100644 --- a/src/control/ws.rs +++ b/src/control/ws.rs @@ -37,8 +37,12 @@ pub enum SendError { impl fmt::Display for SendError { fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { match *self { - SendError::JSONEncoderError(ref err) => write!(fmt, "JSONEncoderError: {}", err), - SendError::WebSocketError(ref err) => write!(fmt, "WebSocketError: {}", err), + SendError::JSONEncoderError(ref err) => { + write!(fmt, "JSONEncoderError: {}", err) + } + SendError::WebSocketError(ref err) => { + write!(fmt, "WebSocketError: {}", err) + } } } } @@ -141,7 +145,10 @@ impl ws::Handler for Handler { Ok(control_request) => control_request, Err(e) => { error!("Received invalid JSON message from controller: {}", e); - return Err(ws::Error::new(ws::ErrorKind::Protocol, "Invalid JSON")); + return Err(ws::Error::new( + ws::ErrorKind::Protocol, + "Invalid JSON", + )); } }; @@ -179,7 +186,8 @@ pub fn listen(client_tx: crossbeam_channel::Sender) { } }; - let listen_result = websocket.listen((config::CONTROL_HOST, config::CONTROL_PORT)); + let listen_result = + websocket.listen((config::CONTROL_HOST, config::CONTROL_PORT)); match listen_result { Ok(_) => (), diff --git a/src/dispatcher.rs b/src/dispatcher.rs index 9292a29..025ef1c 100644 --- a/src/dispatcher.rs +++ b/src/dispatcher.rs @@ -56,12 +56,18 @@ impl Dispatcher { /// Dispatches the given message by wrapping it with a handler. pub fn dispatch(&self, message: Message) -> Box { match message { - Message::ServerResponse(ServerResponse::LoginResponse(response)) => { - Box::new(DispatchedMessage::new(response, LoginHandler::default())) - } - Message::ServerResponse(ServerResponse::PrivilegedUsersResponse(response)) => Box::new( - DispatchedMessage::new(response, SetPrivilegedUsersHandler::default()), - ), + Message::ServerResponse(ServerResponse::LoginResponse( + response, + )) => Box::new(DispatchedMessage::new( + response, + LoginHandler::default(), + )), + Message::ServerResponse( + ServerResponse::PrivilegedUsersResponse(response), + ) => Box::new(DispatchedMessage::new( + response, + SetPrivilegedUsersHandler::default(), + )), _ => panic!("Unimplemented"), } } @@ -76,18 +82,26 @@ mod tests { #[test] fn dispatcher_privileged_users_response() { Dispatcher::new().dispatch(Message::ServerResponse( - server::ServerResponse::PrivilegedUsersResponse(server::PrivilegedUsersResponse { - users: vec!["foo".to_string(), "bar".to_string(), "baz".to_string()], - }), + server::ServerResponse::PrivilegedUsersResponse( + server::PrivilegedUsersResponse { + users: vec![ + "foo".to_string(), + "bar".to_string(), + "baz".to_string(), + ], + }, + ), )); } #[test] fn dispatcher_login_response() { Dispatcher::new().dispatch(Message::ServerResponse( - server::ServerResponse::LoginResponse(server::LoginResponse::LoginFail { - reason: "bleep bloop".to_string(), - }), + server::ServerResponse::LoginResponse( + server::LoginResponse::LoginFail { + reason: "bleep bloop".to_string(), + }, + ), )); } } diff --git a/src/executor.rs b/src/executor.rs index 3372b77..a551d98 100644 --- a/src/executor.rs +++ b/src/executor.rs @@ -136,7 +136,8 @@ mod tests { let context = executor.join(); - let expected_users = vec![(user1.name.clone(), user1), (user2.name.clone(), user2)]; + let expected_users = + vec![(user1.name.clone(), user1), (user2.name.clone(), user2)]; let mut users = context.users.lock().get_list(); users.sort(); diff --git a/src/handlers/login_handler.rs b/src/handlers/login_handler.rs index 3913805..2cb4b9d 100644 --- a/src/handlers/login_handler.rs +++ b/src/handlers/login_handler.rs @@ -9,7 +9,11 @@ use crate::proto::server::LoginResponse; pub struct LoginHandler; impl MessageHandler for LoginHandler { - fn run(self, context: &Context, _message: &LoginResponse) -> io::Result<()> { + fn run( + self, + context: &Context, + _message: &LoginResponse, + ) -> io::Result<()> { let lock = context.login.lock(); match *lock { diff --git a/src/handlers/set_privileged_users_handler.rs b/src/handlers/set_privileged_users_handler.rs index a24c882..260559f 100644 --- a/src/handlers/set_privileged_users_handler.rs +++ b/src/handlers/set_privileged_users_handler.rs @@ -8,7 +8,11 @@ use crate::proto::server::PrivilegedUsersResponse; pub struct SetPrivilegedUsersHandler; impl MessageHandler for SetPrivilegedUsersHandler { - fn run(self, context: &Context, message: &PrivilegedUsersResponse) -> io::Result<()> { + fn run( + self, + context: &Context, + message: &PrivilegedUsersResponse, + ) -> io::Result<()> { let users = message.users.clone(); context.users.lock().set_all_privileged(users); Ok(()) diff --git a/src/main.rs b/src/main.rs index 735065a..f5095a0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -29,7 +29,8 @@ fn main() { } }; - let (proto_to_client_tx, proto_to_client_rx) = crossbeam_channel::unbounded(); + let (proto_to_client_tx, proto_to_client_rx) = + crossbeam_channel::unbounded(); let mut proto_agent = match proto::Agent::new(proto_to_client_tx) { Ok(agent) => agent, @@ -40,10 +41,14 @@ fn main() { }; let client_to_proto_tx = proto_agent.channel(); - let (control_to_client_tx, control_to_client_rx) = crossbeam_channel::unbounded(); - - let mut client = - client::Client::new(client_to_proto_tx, proto_to_client_rx, control_to_client_rx); + let (control_to_client_tx, control_to_client_rx) = + crossbeam_channel::unbounded(); + + let mut client = client::Client::new( + client_to_proto_tx, + proto_to_client_rx, + control_to_client_rx, + ); thread::spawn(move || control::listen(control_to_client_tx)); thread::spawn(move || proto_agent.run().unwrap()); diff --git a/src/proto/codec.rs b/src/proto/codec.rs index 3a650ae..d1b8b8e 100644 --- a/src/proto/codec.rs +++ b/src/proto/codec.rs @@ -12,7 +12,8 @@ use thiserror::Error; use super::prefix::Prefixer; use super::u32::{decode_u32, U32_BYTE_LEN}; use super::value_codec::{ - ValueDecode, ValueDecodeError, ValueDecoder, ValueEncode, ValueEncodeError, ValueEncoder, + ValueDecode, ValueDecodeError, ValueDecoder, ValueEncode, ValueEncodeError, + ValueEncoder, }; #[derive(Debug, Error, PartialEq)] @@ -45,7 +46,11 @@ impl FrameEncoder { } } - pub fn encode_to(&mut self, value: &T, buffer: &mut BytesMut) -> Result<(), FrameEncodeError> { + pub fn encode_to( + &mut self, + value: &T, + buffer: &mut BytesMut, + ) -> Result<(), FrameEncodeError> { let mut prefixer = Prefixer::new(buffer); ValueEncoder::new(prefixer.suffix_mut()).encode(value)?; @@ -83,7 +88,10 @@ impl FrameDecoder { /// /// Returns an error if the length prefix or the framed value are malformed, /// in which case `bytes` is untouched. - pub fn decode_from(&mut self, bytes: &mut BytesMut) -> Result, ValueDecodeError> { + pub fn decode_from( + &mut self, + bytes: &mut BytesMut, + ) -> Result, ValueDecodeError> { if bytes.len() < U32_BYTE_LEN { return Ok(None); // Not enough bytes yet. } @@ -205,7 +213,8 @@ mod tests { let mut bytes = BytesMut::new(); bytes.extend_from_slice(&initial_bytes); - let value: Option = FrameDecoder::new().decode_from(&mut bytes).unwrap(); + let value: Option = + FrameDecoder::new().decode_from(&mut bytes).unwrap(); assert_eq!(value, None); assert_eq!(bytes, initial_bytes); // Untouched. @@ -221,7 +230,8 @@ mod tests { let mut bytes = BytesMut::new(); bytes.extend_from_slice(&initial_bytes); - let value: Option = FrameDecoder::new().decode_from(&mut bytes).unwrap(); + let value: Option = + FrameDecoder::new().decode_from(&mut bytes).unwrap(); assert_eq!(value, None); assert_eq!(bytes, initial_bytes); // Untouched. diff --git a/src/proto/handler.rs b/src/proto/handler.rs index 774d21a..db48c49 100644 --- a/src/proto/handler.rs +++ b/src/proto/handler.rs @@ -123,11 +123,13 @@ impl Handler { ) -> io::Result { let host = config::SERVER_HOST; let port = config::SERVER_PORT; - let server_stream = Stream::new((host, port), ServerResponseSender(client_tx.clone()))?; + let server_stream = + Stream::new((host, port), ServerResponseSender(client_tx.clone()))?; info!("Connected to server at {}:{}", host, port); - let listener = listener_bind((config::LISTEN_HOST, config::LISTEN_PORT))?; + let listener = + listener_bind((config::LISTEN_HOST, config::LISTEN_PORT))?; info!( "Listening for connections on {}:{}", config::LISTEN_HOST, @@ -311,10 +313,16 @@ impl mio::deprecated::Handler for Handler { } } - fn notify(&mut self, event_loop: &mut mio::deprecated::EventLoop, request: Request) { + fn notify( + &mut self, + event_loop: &mut mio::deprecated::EventLoop, + request: Request, + ) { match request { Request::PeerConnect(peer_id, ip, port) => { - if let Err(err) = self.connect_to_peer(peer_id, ip, port, event_loop) { + if let Err(err) = + self.connect_to_peer(peer_id, ip, port, event_loop) + { error!( "Cannot open peer connection {} to {}:{}: {}", peer_id, ip, port, err @@ -336,7 +344,11 @@ impl mio::deprecated::Handler for Handler { return; } }; - self.process_peer_intent(intent, mio::Token(peer_id), event_loop); + self.process_peer_intent( + intent, + mio::Token(peer_id), + event_loop, + ); } Request::ServerRequest(server_request) => { @@ -357,7 +369,9 @@ pub struct Agent { } impl Agent { - pub fn new(client_tx: crossbeam_channel::Sender) -> io::Result { + pub fn new( + client_tx: crossbeam_channel::Sender, + ) -> io::Result { // Create the event loop. #[allow(deprecated)] let mut event_loop = mio::deprecated::EventLoop::new()?; diff --git a/src/proto/mod.rs b/src/proto/mod.rs index 120a575..4daa4ac 100644 --- a/src/proto/mod.rs +++ b/src/proto/mod.rs @@ -21,6 +21,6 @@ pub use self::server::{ServerRequest, ServerResponse}; pub use self::stream::*; pub use self::user::{User, UserStatus}; pub use self::value_codec::{ - Decode, ValueDecode, ValueDecodeError, ValueDecoder, ValueEncode, ValueEncodeError, - ValueEncoder, + Decode, ValueDecode, ValueDecodeError, ValueDecoder, ValueEncode, + ValueEncodeError, ValueEncoder, }; diff --git a/src/proto/packet.rs b/src/proto/packet.rs index 9317728..c57d12c 100644 --- a/src/proto/packet.rs +++ b/src/proto/packet.rs @@ -132,15 +132,21 @@ pub enum PacketReadError { impl fmt::Display for PacketReadError { fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { match *self { - PacketReadError::InvalidBoolError(n) => write!(fmt, "InvalidBoolError: {}", n), - PacketReadError::InvalidU16Error(n) => write!(fmt, "InvalidU16Error: {}", n), + PacketReadError::InvalidBoolError(n) => { + write!(fmt, "InvalidBoolError: {}", n) + } + PacketReadError::InvalidU16Error(n) => { + write!(fmt, "InvalidU16Error: {}", n) + } PacketReadError::InvalidStringError(ref bytes) => { write!(fmt, "InvalidStringError: {:?}", bytes) } PacketReadError::InvalidUserStatusError(n) => { write!(fmt, "InvalidUserStatusError: {}", n) } - PacketReadError::IOError(ref err) => write!(fmt, "IOError: {}", err), + PacketReadError::IOError(ref err) => { + write!(fmt, "IOError: {}", err) + } } } } @@ -151,7 +157,9 @@ impl error::Error for PacketReadError { PacketReadError::InvalidBoolError(_) => "InvalidBoolError", PacketReadError::InvalidU16Error(_) => "InvalidU16Error", PacketReadError::InvalidStringError(_) => "InvalidStringError", - PacketReadError::InvalidUserStatusError(_) => "InvalidUserStatusError", + PacketReadError::InvalidUserStatusError(_) => { + "InvalidUserStatusError" + } PacketReadError::IOError(_) => "IOError", } } @@ -383,7 +391,8 @@ impl Parser { // If we have finished reading the length prefix, then // deserialize it, switch states and try to read the packet // bytes. - let message_len = LittleEndian::read_u32(&mut self.buffer) as usize; + let message_len = + LittleEndian::read_u32(&mut self.buffer) as usize; if message_len > MAX_MESSAGE_SIZE { unimplemented!(); }; diff --git a/src/proto/peer/message.rs b/src/proto/peer/message.rs index 3876f4c..cf269c6 100644 --- a/src/proto/peer/message.rs +++ b/src/proto/peer/message.rs @@ -2,8 +2,9 @@ use std::io; use crate::proto::peer::constants::*; use crate::proto::{ - MutPacket, Packet, PacketReadError, ReadFromPacket, ValueDecode, ValueDecodeError, - ValueDecoder, ValueEncode, ValueEncodeError, ValueEncoder, WriteToPacket, + MutPacket, Packet, PacketReadError, ReadFromPacket, ValueDecode, + ValueDecodeError, ValueDecoder, ValueEncode, ValueEncodeError, + ValueEncoder, WriteToPacket, }; /*=========* @@ -22,7 +23,9 @@ impl ReadFromPacket for Message { fn read_from_packet(packet: &mut Packet) -> Result { let code: u32 = packet.read_value()?; let message = match code { - CODE_PIERCE_FIREWALL => Message::PierceFirewall(packet.read_value()?), + CODE_PIERCE_FIREWALL => { + Message::PierceFirewall(packet.read_value()?) + } CODE_PEER_INIT => Message::PeerInit(packet.read_value()?), @@ -42,7 +45,9 @@ impl ReadFromPacket for Message { } impl ValueDecode for Message { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let position = decoder.position(); let code: u32 = decoder.decode()?; let message = match code { @@ -67,7 +72,10 @@ impl ValueDecode for Message { } impl ValueEncode for Message { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { match *self { Message::PierceFirewall(token) => { encoder.encode_u32(CODE_PIERCE_FIREWALL)?; @@ -132,7 +140,10 @@ impl WriteToPacket for PeerInit { } impl ValueEncode for PeerInit { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_string(&self.user_name)?; encoder.encode_string(&self.connection_type)?; encoder.encode_u32(self.token)?; @@ -141,7 +152,9 @@ impl ValueEncode for PeerInit { } impl ValueDecode for PeerInit { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let user_name = decoder.decode()?; let connection_type = decoder.decode()?; let token = decoder.decode()?; diff --git a/src/proto/server/request.rs b/src/proto/server/request.rs index b8bd609..f43145e 100644 --- a/src/proto/server/request.rs +++ b/src/proto/server/request.rs @@ -6,7 +6,8 @@ use crypto::md5::Md5; use crate::proto::packet::{MutPacket, WriteToPacket}; use crate::proto::server::constants::*; use crate::proto::{ - ValueDecode, ValueDecodeError, ValueDecoder, ValueEncode, ValueEncodeError, ValueEncoder, + ValueDecode, ValueDecodeError, ValueDecoder, ValueEncode, ValueEncodeError, + ValueEncoder, }; /* ------- * @@ -100,7 +101,10 @@ impl WriteToPacket for ServerRequest { } impl ValueEncode for ServerRequest { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { match *self { ServerRequest::CannotConnectRequest(ref request) => { encoder.encode_u32(CODE_CANNOT_CONNECT)?; @@ -151,7 +155,9 @@ impl ValueEncode for ServerRequest { } impl ValueDecode for ServerRequest { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let position = decoder.position(); let code: u32 = decoder.decode()?; let request = match code { @@ -227,14 +233,19 @@ impl WriteToPacket for CannotConnectRequest { } impl ValueEncode for CannotConnectRequest { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_u32(self.token)?; encoder.encode_string(&self.user_name) } } impl ValueDecode for CannotConnectRequest { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let token = decoder.decode()?; let user_name = decoder.decode()?; Ok(CannotConnectRequest { token, user_name }) @@ -262,7 +273,10 @@ impl WriteToPacket for ConnectToPeerRequest { } impl ValueEncode for ConnectToPeerRequest { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_u32(self.token)?; encoder.encode_string(&self.user_name)?; encoder.encode_string(&self.connection_type) @@ -270,7 +284,9 @@ impl ValueEncode for ConnectToPeerRequest { } impl ValueDecode for ConnectToPeerRequest { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let token = decoder.decode()?; let user_name = decoder.decode()?; let connection_type = decoder.decode()?; @@ -301,14 +317,19 @@ impl WriteToPacket for FileSearchRequest { } impl ValueEncode for FileSearchRequest { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_u32(self.ticket)?; encoder.encode_string(&self.query) } } impl ValueDecode for FileSearchRequest { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let ticket = decoder.decode()?; let query = decoder.decode()?; Ok(FileSearchRequest { ticket, query }) @@ -370,7 +391,10 @@ impl WriteToPacket for LoginRequest { } impl ValueEncode for LoginRequest { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_string(&self.username)?; encoder.encode_string(&self.password)?; encoder.encode_u32(self.major)?; @@ -380,7 +404,9 @@ impl ValueEncode for LoginRequest { } impl ValueDecode for LoginRequest { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let username = decoder.decode()?; let password = decoder.decode()?; let major = decoder.decode()?; @@ -413,13 +439,18 @@ impl WriteToPacket for PeerAddressRequest { } impl ValueEncode for PeerAddressRequest { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_string(&self.username) } } impl ValueDecode for PeerAddressRequest { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let username = decoder.decode()?; Ok(PeerAddressRequest { username: username }) } @@ -442,13 +473,18 @@ impl WriteToPacket for RoomJoinRequest { } impl ValueEncode for RoomJoinRequest { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_string(&self.room_name) } } impl ValueDecode for RoomJoinRequest { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let room_name = decoder.decode()?; Ok(RoomJoinRequest { room_name: room_name, @@ -473,13 +509,18 @@ impl WriteToPacket for RoomLeaveRequest { } impl ValueEncode for RoomLeaveRequest { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_string(&self.room_name) } } impl ValueDecode for RoomLeaveRequest { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let room_name = decoder.decode()?; Ok(RoomLeaveRequest { room_name: room_name, @@ -506,14 +547,19 @@ impl WriteToPacket for RoomMessageRequest { } impl ValueEncode for RoomMessageRequest { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_string(&self.room_name)?; encoder.encode_string(&self.message) } } impl ValueDecode for RoomMessageRequest { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let room_name = decoder.decode()?; let message = decoder.decode()?; Ok(RoomMessageRequest { room_name, message }) @@ -537,13 +583,18 @@ impl WriteToPacket for SetListenPortRequest { } impl ValueEncode for SetListenPortRequest { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode(&self.port) } } impl ValueDecode for SetListenPortRequest { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let port = decoder.decode()?; Ok(SetListenPortRequest { port: port }) } @@ -566,13 +617,18 @@ impl WriteToPacket for UserStatusRequest { } impl ValueEncode for UserStatusRequest { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_string(&self.user_name) } } impl ValueDecode for UserStatusRequest { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let user_name = decoder.decode()?; Ok(UserStatusRequest { user_name: user_name, @@ -643,7 +699,8 @@ mod tests { #[test] fn new_login_request_has_correct_digest() { - let request = LoginRequest::new("alice", "password1234", 1337, 42).unwrap(); + let request = + LoginRequest::new("alice", "password1234", 1337, 42).unwrap(); assert!(request.has_correct_digest()); } diff --git a/src/proto/server/response.rs b/src/proto/server/response.rs index 41e7826..c5ae637 100644 --- a/src/proto/server/response.rs +++ b/src/proto/server/response.rs @@ -3,8 +3,8 @@ use std::net; use crate::proto::packet::{Packet, PacketReadError, ReadFromPacket}; use crate::proto::server::constants::*; use crate::proto::{ - User, UserStatus, ValueDecode, ValueDecodeError, ValueDecoder, ValueEncode, ValueEncodeError, - ValueEncoder, + User, UserStatus, ValueDecode, ValueDecodeError, ValueDecoder, ValueEncode, + ValueEncodeError, ValueEncoder, }; /*=================* @@ -40,39 +40,67 @@ impl ReadFromPacket for ServerResponse { fn read_from_packet(packet: &mut Packet) -> Result { let code: u32 = packet.read_value()?; let resp = match code { - CODE_CONNECT_TO_PEER => ServerResponse::ConnectToPeerResponse(packet.read_value()?), + CODE_CONNECT_TO_PEER => { + ServerResponse::ConnectToPeerResponse(packet.read_value()?) + } - CODE_FILE_SEARCH => ServerResponse::FileSearchResponse(packet.read_value()?), + CODE_FILE_SEARCH => { + ServerResponse::FileSearchResponse(packet.read_value()?) + } CODE_LOGIN => ServerResponse::LoginResponse(packet.read_value()?), - CODE_PEER_ADDRESS => ServerResponse::PeerAddressResponse(packet.read_value()?), + CODE_PEER_ADDRESS => { + ServerResponse::PeerAddressResponse(packet.read_value()?) + } - CODE_PRIVILEGED_USERS => ServerResponse::PrivilegedUsersResponse(packet.read_value()?), + CODE_PRIVILEGED_USERS => { + ServerResponse::PrivilegedUsersResponse(packet.read_value()?) + } - CODE_ROOM_JOIN => ServerResponse::RoomJoinResponse(packet.read_value()?), + CODE_ROOM_JOIN => { + ServerResponse::RoomJoinResponse(packet.read_value()?) + } - CODE_ROOM_LEAVE => ServerResponse::RoomLeaveResponse(packet.read_value()?), + CODE_ROOM_LEAVE => { + ServerResponse::RoomLeaveResponse(packet.read_value()?) + } - CODE_ROOM_LIST => ServerResponse::RoomListResponse(packet.read_value()?), + CODE_ROOM_LIST => { + ServerResponse::RoomListResponse(packet.read_value()?) + } - CODE_ROOM_MESSAGE => ServerResponse::RoomMessageResponse(packet.read_value()?), + CODE_ROOM_MESSAGE => { + ServerResponse::RoomMessageResponse(packet.read_value()?) + } - CODE_ROOM_TICKERS => ServerResponse::RoomTickersResponse(packet.read_value()?), + CODE_ROOM_TICKERS => { + ServerResponse::RoomTickersResponse(packet.read_value()?) + } - CODE_ROOM_USER_JOINED => ServerResponse::RoomUserJoinedResponse(packet.read_value()?), + CODE_ROOM_USER_JOINED => { + ServerResponse::RoomUserJoinedResponse(packet.read_value()?) + } - CODE_ROOM_USER_LEFT => ServerResponse::RoomUserLeftResponse(packet.read_value()?), + CODE_ROOM_USER_LEFT => { + ServerResponse::RoomUserLeftResponse(packet.read_value()?) + } - CODE_USER_INFO => ServerResponse::UserInfoResponse(packet.read_value()?), + CODE_USER_INFO => { + ServerResponse::UserInfoResponse(packet.read_value()?) + } - CODE_USER_STATUS => ServerResponse::UserStatusResponse(packet.read_value()?), + CODE_USER_STATUS => { + ServerResponse::UserStatusResponse(packet.read_value()?) + } CODE_WISHLIST_INTERVAL => { ServerResponse::WishlistIntervalResponse(packet.read_value()?) } - CODE_PARENT_MIN_SPEED => ServerResponse::ParentMinSpeedResponse(packet.read_value()?), + CODE_PARENT_MIN_SPEED => { + ServerResponse::ParentMinSpeedResponse(packet.read_value()?) + } CODE_PARENT_SPEED_RATIO => { ServerResponse::ParentSpeedRatioResponse(packet.read_value()?) @@ -92,7 +120,10 @@ impl ReadFromPacket for ServerResponse { } impl ValueEncode for ServerResponse { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { match *self { ServerResponse::ConnectToPeerResponse(ref response) => { encoder.encode_u32(CODE_CONNECT_TO_PEER)?; @@ -171,7 +202,9 @@ impl ValueEncode for ServerResponse { } impl ValueDecode for ServerResponse { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let position = decoder.position(); let code: u32 = decoder.decode()?; let response = match code { @@ -290,7 +323,10 @@ impl ReadFromPacket for ConnectToPeerResponse { } impl ValueEncode for ConnectToPeerResponse { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode(&self.user_name)?; encoder.encode(&self.connection_type)?; encoder.encode(&self.ip)?; @@ -301,7 +337,9 @@ impl ValueEncode for ConnectToPeerResponse { } impl ValueDecode for ConnectToPeerResponse { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let user_name = decoder.decode()?; let connection_type = decoder.decode()?; let ip = decoder.decode()?; @@ -346,7 +384,10 @@ impl ReadFromPacket for FileSearchResponse { } impl ValueEncode for FileSearchResponse { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_string(&self.user_name)?; encoder.encode_u32(self.ticket)?; encoder.encode_string(&self.query) @@ -354,7 +395,9 @@ impl ValueEncode for FileSearchResponse { } impl ValueDecode for FileSearchResponse { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let user_name = decoder.decode()?; let ticket = decoder.decode()?; let query = decoder.decode()?; @@ -409,7 +452,10 @@ impl ReadFromPacket for LoginResponse { } impl ValueEncode for LoginResponse { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { match *self { LoginResponse::LoginOk { ref motd, @@ -430,7 +476,9 @@ impl ValueEncode for LoginResponse { } impl ValueDecode for LoginResponse { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let ok: bool = decoder.decode()?; if !ok { let reason = decoder.decode()?; @@ -471,13 +519,18 @@ impl ReadFromPacket for ParentMinSpeedResponse { } impl ValueEncode for ParentMinSpeedResponse { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_u32(self.value) } } impl ValueDecode for ParentMinSpeedResponse { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let value = decoder.decode()?; Ok(ParentMinSpeedResponse { value }) } @@ -500,13 +553,18 @@ impl ReadFromPacket for ParentSpeedRatioResponse { } impl ValueEncode for ParentSpeedRatioResponse { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_u32(self.value) } } impl ValueDecode for ParentSpeedRatioResponse { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let value = decoder.decode()?; Ok(ParentSpeedRatioResponse { value }) } @@ -534,7 +592,10 @@ impl ReadFromPacket for PeerAddressResponse { } impl ValueEncode for PeerAddressResponse { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode(&self.username)?; encoder.encode(&self.ip)?; encoder.encode_u16(self.port) @@ -542,7 +603,9 @@ impl ValueEncode for PeerAddressResponse { } impl ValueDecode for PeerAddressResponse { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let username = decoder.decode()?; let ip = decoder.decode()?; let port = decoder.decode()?; @@ -567,13 +630,18 @@ impl ReadFromPacket for PrivilegedUsersResponse { } impl ValueEncode for PrivilegedUsersResponse { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode(&self.users) } } impl ValueDecode for PrivilegedUsersResponse { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let users = decoder.decode()?; Ok(PrivilegedUsersResponse { users }) } @@ -633,7 +701,10 @@ impl ReadFromPacket for RoomJoinResponse { } impl RoomJoinResponse { - fn read_user_infos(&mut self, packet: &mut Packet) -> Result<(), PacketReadError> { + fn read_user_infos( + &mut self, + packet: &mut Packet, + ) -> Result<(), PacketReadError> { let num_statuses: usize = packet.read_value()?; for i in 0..num_statuses { if let Some(user) = self.users.get_mut(i) { @@ -674,7 +745,11 @@ impl RoomJoinResponse { { warn!( "RoomJoinResponse: mismatched vector sizes {}, {}, {}, {}, {}", - num_users, num_statuses, num_infos, num_free_slots, num_countries + num_users, + num_statuses, + num_infos, + num_free_slots, + num_countries ); } @@ -727,7 +802,10 @@ fn build_user( } impl ValueEncode for UserInfo { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_u32(self.average_speed)?; encoder.encode_u32(self.num_downloads)?; encoder.encode_u32(self.unknown)?; @@ -737,7 +815,9 @@ impl ValueEncode for UserInfo { } impl ValueDecode for UserInfo { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let average_speed = decoder.decode()?; let num_downloads = decoder.decode()?; let unknown = decoder.decode()?; @@ -754,7 +834,10 @@ impl ValueDecode for UserInfo { } impl ValueEncode for RoomJoinResponse { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { let mut user_names = vec![]; let mut user_statuses = vec![]; let mut user_infos = vec![]; @@ -801,9 +884,13 @@ fn build_users( let country_opt = countries.pop(); match (name_opt, status_opt, info_opt, slots_opt, country_opt) { - (Some(name), Some(status), Some(info), Some(slots), Some(country)) => { - users.push(build_user(name, status, info, slots, country)) - } + ( + Some(name), + Some(status), + Some(info), + Some(slots), + Some(country), + ) => users.push(build_user(name, status, info, slots, country)), _ => break, } } @@ -813,7 +900,9 @@ fn build_users( } impl ValueDecode for RoomJoinResponse { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let room_name = decoder.decode()?; let user_names = decoder.decode()?; let user_statuses = decoder.decode()?; @@ -863,13 +952,18 @@ impl ReadFromPacket for RoomLeaveResponse { } impl ValueEncode for RoomLeaveResponse { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_string(&self.room_name) } } impl ValueDecode for RoomLeaveResponse { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let room_name = decoder.decode()?; Ok(RoomLeaveResponse { room_name }) } @@ -903,7 +997,9 @@ impl ReadFromPacket for RoomListResponse { } impl RoomListResponse { - fn read_rooms(packet: &mut Packet) -> Result, PacketReadError> { + fn read_rooms( + packet: &mut Packet, + ) -> Result, PacketReadError> { let num_rooms: usize = packet.read_value()?; let mut rooms = Vec::new(); for _ in 0..num_rooms { @@ -928,7 +1024,10 @@ impl RoomListResponse { Ok(rooms) } - fn build_rooms(mut room_names: Vec, mut user_counts: Vec) -> Vec<(String, u32)> { + fn build_rooms( + mut room_names: Vec, + mut user_counts: Vec, + ) -> Vec<(String, u32)> { let mut rooms = vec![]; loop { @@ -936,7 +1035,9 @@ impl RoomListResponse { let user_count_opt = user_counts.pop(); match (room_name_opt, user_count_opt) { - (Some(room_name), Some(user_count)) => rooms.push((room_name, user_count)), + (Some(room_name), Some(user_count)) => { + rooms.push((room_name, user_count)) + } _ => break, } } @@ -958,7 +1059,9 @@ impl RoomListResponse { rooms } - fn decode_rooms(decoder: &mut ValueDecoder) -> Result, ValueDecodeError> { + fn decode_rooms( + decoder: &mut ValueDecoder, + ) -> Result, ValueDecodeError> { let room_names = decoder.decode()?; let user_counts = decoder.decode()?; Ok(Self::build_rooms(room_names, user_counts)) @@ -982,7 +1085,10 @@ impl RoomListResponse { } impl ValueEncode for RoomListResponse { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { Self::encode_rooms(&self.rooms, encoder)?; Self::encode_rooms(&self.owned_private_rooms, encoder)?; Self::encode_rooms(&self.other_private_rooms, encoder)?; @@ -991,7 +1097,9 @@ impl ValueEncode for RoomListResponse { } impl ValueDecode for RoomListResponse { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let rooms = RoomListResponse::decode_rooms(decoder)?; let owned_private_rooms = RoomListResponse::decode_rooms(decoder)?; let other_private_rooms = RoomListResponse::decode_rooms(decoder)?; @@ -1030,7 +1138,10 @@ impl ReadFromPacket for RoomMessageResponse { } impl ValueEncode for RoomMessageResponse { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_string(&self.room_name)?; encoder.encode_string(&self.user_name)?; encoder.encode_string(&self.message) @@ -1038,7 +1149,9 @@ impl ValueEncode for RoomMessageResponse { } impl ValueDecode for RoomMessageResponse { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let room_name = decoder.decode()?; let user_name = decoder.decode()?; let message = decoder.decode()?; @@ -1077,14 +1190,19 @@ impl ReadFromPacket for RoomTickersResponse { } impl ValueEncode for RoomTickersResponse { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_string(&self.room_name)?; encoder.encode(&self.tickers) } } impl ValueDecode for RoomTickersResponse { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let room_name = decoder.decode()?; let tickers = decoder.decode()?; Ok(RoomTickersResponse { room_name, tickers }) @@ -1135,7 +1253,10 @@ impl ReadFromPacket for RoomUserJoinedResponse { } impl ValueEncode for RoomUserJoinedResponse { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_string(&self.room_name)?; encoder.encode_string(&self.user.name)?; self.user.status.encode(encoder)?; @@ -1146,7 +1267,9 @@ impl ValueEncode for RoomUserJoinedResponse { } impl ValueDecode for RoomUserJoinedResponse { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let room_name = decoder.decode()?; let user_name = decoder.decode()?; let status = decoder.decode()?; @@ -1182,14 +1305,19 @@ impl ReadFromPacket for RoomUserLeftResponse { } impl ValueEncode for RoomUserLeftResponse { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_string(&self.room_name)?; encoder.encode_string(&self.user_name) } } impl ValueDecode for RoomUserLeftResponse { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let room_name = decoder.decode()?; let user_name = decoder.decode()?; Ok(RoomUserLeftResponse { @@ -1230,7 +1358,10 @@ impl ReadFromPacket for UserInfoResponse { } impl ValueEncode for UserInfoResponse { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_string(&self.user_name)?; encoder.encode_u32(self.average_speed as u32)?; encoder.encode_u32(self.num_downloads as u32)?; @@ -1240,7 +1371,9 @@ impl ValueEncode for UserInfoResponse { } impl ValueDecode for UserInfoResponse { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let user_name = decoder.decode()?; let average_speed: u32 = decoder.decode()?; let num_downloads: u32 = decoder.decode()?; @@ -1281,7 +1414,10 @@ impl ReadFromPacket for UserStatusResponse { } impl ValueEncode for UserStatusResponse { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_string(&self.user_name)?; self.status.encode(encoder)?; encoder.encode_bool(self.is_privileged) @@ -1289,7 +1425,9 @@ impl ValueEncode for UserStatusResponse { } impl ValueDecode for UserStatusResponse { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let user_name = decoder.decode()?; let status = decoder.decode()?; let is_privileged = decoder.decode()?; @@ -1318,13 +1456,18 @@ impl ReadFromPacket for WishlistIntervalResponse { } impl ValueEncode for WishlistIntervalResponse { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_u32(self.seconds) } } impl ValueDecode for WishlistIntervalResponse { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let seconds = decoder.decode()?; Ok(WishlistIntervalResponse { seconds }) } @@ -1492,9 +1635,18 @@ mod tests { fn roundtrip_room_list() { roundtrip(ServerResponse::RoomListResponse(RoomListResponse { rooms: vec![("red".to_string(), 12), ("blue".to_string(), 13)], - owned_private_rooms: vec![("green".to_string(), 14), ("purple".to_string(), 15)], - other_private_rooms: vec![("yellow".to_string(), 16), ("orange".to_string(), 17)], - operated_private_room_names: vec!["brown".to_string(), "pink".to_string()], + owned_private_rooms: vec![ + ("green".to_string(), 14), + ("purple".to_string(), 15), + ], + other_private_rooms: vec![ + ("yellow".to_string(), 16), + ("orange".to_string(), 17), + ], + operated_private_room_names: vec![ + "brown".to_string(), + "pink".to_string(), + ], })) } diff --git a/src/proto/stream.rs b/src/proto/stream.rs index 8d75a87..1e2926b 100644 --- a/src/proto/stream.rs +++ b/src/proto/stream.rs @@ -201,7 +201,8 @@ impl Stream { // We're always interested in reading more. #[allow(deprecated)] - let mut event_set = mio::Ready::readable() | mio::Ready::hup() | mio::Ready::error(); + let mut event_set = + mio::Ready::readable() | mio::Ready::hup() | mio::Ready::error(); // If there is still stuff to write in the queue, we're interested in // the socket becoming writable too. if self.queue.len() > 0 { diff --git a/src/proto/testing.rs b/src/proto/testing.rs index 3162b39..1bdd2a2 100644 --- a/src/proto/testing.rs +++ b/src/proto/testing.rs @@ -8,14 +8,16 @@ use tokio::net::{TcpListener, TcpStream}; use crate::proto::{Connection, ServerRequest, ServerResponse}; async fn process(stream: TcpStream) -> io::Result<()> { - let mut connection = Connection::::new(stream); + let mut connection = + Connection::::new(stream); let _request = match connection.read().await? { ServerRequest::LoginRequest(request) => request, request => { return Err(io::Error::new( - io::ErrorKind::InvalidData, - format!("expected login request, got: {:?}", request))); + io::ErrorKind::InvalidData, + format!("expected login request, got: {:?}", request), + )); } }; diff --git a/src/proto/user.rs b/src/proto/user.rs index 182de23..26dabde 100644 --- a/src/proto/user.rs +++ b/src/proto/user.rs @@ -1,8 +1,9 @@ use std::io; use crate::proto::{ - MutPacket, Packet, PacketReadError, ReadFromPacket, ValueDecode, ValueDecodeError, - ValueDecoder, ValueEncode, ValueEncodeError, ValueEncoder, WriteToPacket, + MutPacket, Packet, PacketReadError, ReadFromPacket, ValueDecode, + ValueDecodeError, ValueDecoder, ValueEncode, ValueEncodeError, + ValueEncoder, WriteToPacket, }; const STATUS_OFFLINE: u32 = 1; @@ -10,7 +11,17 @@ const STATUS_AWAY: u32 = 2; const STATUS_ONLINE: u32 = 3; /// This enumeration is the list of possible user statuses. -#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd, RustcDecodable, RustcEncodable)] +#[derive( + Clone, + Copy, + Debug, + Eq, + Ord, + PartialEq, + PartialOrd, + RustcDecodable, + RustcEncodable, +)] pub enum UserStatus { /// The user if offline. Offline, @@ -45,7 +56,10 @@ impl WriteToPacket for UserStatus { } impl ValueEncode for UserStatus { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { let value = match *self { UserStatus::Offline => STATUS_OFFLINE, UserStatus::Away => STATUS_AWAY, @@ -56,7 +70,9 @@ impl ValueEncode for UserStatus { } impl ValueDecode for UserStatus { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let position = decoder.position(); let value: u32 = decoder.decode()?; match value { @@ -73,7 +89,9 @@ impl ValueDecode for UserStatus { } /// This structure contains the last known information about a fellow user. -#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd, RustcDecodable, RustcEncodable)] +#[derive( + Clone, Debug, Eq, Ord, PartialEq, PartialOrd, RustcDecodable, RustcEncodable, +)] pub struct User { /// The name of the user. pub name: String, diff --git a/src/proto/value_codec.rs b/src/proto/value_codec.rs index 6c7dc90..942314c 100644 --- a/src/proto/value_codec.rs +++ b/src/proto/value_codec.rs @@ -95,7 +95,9 @@ pub enum ValueDecodeError { impl From for io::Error { fn from(error: ValueDecodeError) -> Self { let kind = match &error { - &ValueDecodeError::NotEnoughData { .. } => io::ErrorKind::UnexpectedEof, + &ValueDecodeError::NotEnoughData { .. } => { + io::ErrorKind::UnexpectedEof + } _ => io::ErrorKind::InvalidData, }; let message = format!("{}", &error); @@ -125,7 +127,9 @@ pub struct ValueDecoder<'a> { /// a `ValueDecoder`. pub trait ValueDecode: Sized { /// Attempts to decode a value of this type with the given decoder. - fn decode_from(decoder: &mut ValueDecoder) -> Result; + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result; } impl<'a> ValueDecoder<'a> { @@ -225,11 +229,13 @@ impl<'a> ValueDecoder<'a> { let position = self.position; let bytes = self.consume(length)?; - let result = WINDOWS_1252.decode_without_bom_handling_and_without_replacement(bytes); + let result = WINDOWS_1252 + .decode_without_bom_handling_and_without_replacement(bytes); match result { Some(string) => Ok(string.into_owned()), None => Err(ValueDecodeError::InvalidString { - cause: "malformed sequence in Windows-1252-encoded string".to_string(), + cause: "malformed sequence in Windows-1252-encoded string" + .to_string(), position: position, }), } @@ -248,38 +254,50 @@ impl<'a> ValueDecoder<'a> { } impl ValueDecode for u32 { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { decoder.decode_u32() } } impl ValueDecode for u16 { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { decoder.decode_u16() } } impl ValueDecode for bool { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { decoder.decode_bool() } } impl ValueDecode for net::Ipv4Addr { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let ip = decoder.decode_u32()?; Ok(net::Ipv4Addr::from(ip)) } } impl ValueDecode for String { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { decoder.decode_string() } } impl ValueDecode for (T, U) { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let first = decoder.decode()?; let second = decoder.decode()?; Ok((first, second)) @@ -287,7 +305,9 @@ impl ValueDecode for (T, U) { } impl ValueDecode for Vec { - fn decode_from(decoder: &mut ValueDecoder) -> Result { + fn decode_from( + decoder: &mut ValueDecoder, + ) -> Result { let len = decoder.decode_u32()? as usize; let mut vec = Vec::with_capacity(len); for _ in 0..len { @@ -328,7 +348,10 @@ pub struct ValueEncoder<'a> { pub trait ValueEncode { // TODO: Rename to encode_to(). /// Attempts to encode `self` with the given encoder. - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError>; + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError>; } impl<'a> ValueEncoder<'a> { @@ -388,31 +411,46 @@ impl<'a> ValueEncoder<'a> { /// ``` /// encoder.encode(&Foo::new(bar))?; /// ``` - pub fn encode(&mut self, val: &T) -> Result<(), ValueEncodeError> { + pub fn encode( + &mut self, + val: &T, + ) -> Result<(), ValueEncodeError> { val.encode(self) } } impl ValueEncode for u32 { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_u32(*self) } } impl ValueEncode for u16 { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_u16(*self) } } impl ValueEncode for bool { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_bool(*self) } } impl ValueEncode for net::Ipv4Addr { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_u32(u32::from(*self)) } } @@ -426,32 +464,47 @@ impl ValueEncode for net::Ipv4Addr { // Value{De,En}code) but it is not really worth the hassle. impl ValueEncode for str { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_string(self) } } impl ValueEncode for String { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_string(self) } } impl<'a> ValueEncode for &'a String { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_string(*self) } } impl ValueEncode for (T, U) { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { self.0.encode(encoder)?; self.1.encode(encoder) } } impl ValueEncode for [T] { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { encoder.encode_u32(self.len() as u32)?; for ref item in self { item.encode(encoder)?; @@ -461,7 +514,10 @@ impl ValueEncode for [T] { } impl ValueEncode for Vec { - fn encode(&self, encoder: &mut ValueEncoder) -> Result<(), ValueEncodeError> { + fn encode( + &self, + encoder: &mut ValueEncoder, + ) -> Result<(), ValueEncodeError> { let slice: &[T] = &*self; slice.encode(encoder) } @@ -480,7 +536,9 @@ pub mod tests { use bytes::{BufMut, BytesMut}; - use super::{ValueDecode, ValueDecodeError, ValueDecoder, ValueEncode, ValueEncoder}; + use super::{ + ValueDecode, ValueDecodeError, ValueDecoder, ValueEncode, ValueEncoder, + }; // Declared here because assert_eq!(bytes, &[]) fails to infer types. const EMPTY_BYTES: &'static [u8] = &[]; @@ -864,7 +922,13 @@ pub mod tests { let mut vec = vec![]; let mut expected_bytes = BytesMut::new(); - expected_bytes.extend_from_slice(&[13, U32_ENCODINGS.len() as u8, 0, 0, 0]); + expected_bytes.extend_from_slice(&[ + 13, + U32_ENCODINGS.len() as u8, + 0, + 0, + 0, + ]); for &(val, ref encoded_bytes) in &U32_ENCODINGS { vec.push(val); diff --git a/src/room.rs b/src/room.rs index 7cd8fbb..4205b89 100644 --- a/src/room.rs +++ b/src/room.rs @@ -92,13 +92,17 @@ pub enum Error { impl fmt::Display for Error { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match *self { - Error::RoomNotFound(ref room_name) => write!(f, "room {:?} not found", room_name), + Error::RoomNotFound(ref room_name) => { + write!(f, "room {:?} not found", room_name) + } - Error::MembershipChangeInvalid(old_membership, new_membership) => write!( - f, - "cannot change membership from {:?} to {:?}", - old_membership, new_membership - ), + Error::MembershipChangeInvalid(old_membership, new_membership) => { + write!( + f, + "cannot change membership from {:?} to {:?}", + old_membership, new_membership + ) + } } } } @@ -172,7 +176,8 @@ impl RoomMap { /// server response. pub fn set_room_list(&mut self, mut response: server::RoomListResponse) { // Replace the old mapping with an empty one. - let mut old_map = mem::replace(&mut self.map, collections::HashMap::new()); + let mut old_map = + mem::replace(&mut self.map, collections::HashMap::new()); // Add all public rooms. for (name, user_count) in response.rooms.drain(..) { @@ -181,12 +186,22 @@ impl RoomMap { // Add all private, owned, rooms. for (name, user_count) in response.owned_private_rooms.drain(..) { - self.update_one(name, Visibility::PrivateOwned, user_count, &mut old_map); + self.update_one( + name, + Visibility::PrivateOwned, + user_count, + &mut old_map, + ); } // Add all private, unowned, rooms. for (name, user_count) in response.other_private_rooms.drain(..) { - self.update_one(name, Visibility::PrivateOther, user_count, &mut old_map); + self.update_one( + name, + Visibility::PrivateOther, + user_count, + &mut old_map, + ); } // Mark all operated rooms as necessary. @@ -303,7 +318,11 @@ impl RoomMap { } /// Saves the given message as the last one in the given room. - pub fn add_message(&mut self, room_name: &str, message: Message) -> Result<(), Error> { + pub fn add_message( + &mut self, + room_name: &str, + message: Message, + ) -> Result<(), Error> { let room = self.get_mut_strict(room_name)?; room.messages.push(message); Ok(()) @@ -311,7 +330,11 @@ impl RoomMap { /// Inserts the given user in the given room's set of members. /// Returns an error if the room is not found. - pub fn insert_member(&mut self, room_name: &str, user_name: String) -> Result<(), Error> { + pub fn insert_member( + &mut self, + room_name: &str, + user_name: String, + ) -> Result<(), Error> { let room = self.get_mut_strict(room_name)?; room.members.insert(user_name); Ok(()) @@ -319,7 +342,11 @@ impl RoomMap { /// Removes the given user from the given room's set of members. /// Returns an error if the room is not found. - pub fn remove_member(&mut self, room_name: &str, user_name: &str) -> Result<(), Error> { + pub fn remove_member( + &mut self, + room_name: &str, + user_name: &str, + ) -> Result<(), Error> { let room = self.get_mut_strict(room_name)?; room.members.remove(user_name); Ok(()) @@ -355,7 +382,10 @@ mod tests { fn room_map_get_strict() { let mut rooms = RoomMap::new(); rooms.set_room_list(RoomListResponse { - rooms: vec![("room a".to_string(), 42), ("room b".to_string(), 1337)], + rooms: vec![ + ("room a".to_string(), 42), + ("room b".to_string(), 1337), + ], owned_private_rooms: vec![], other_private_rooms: vec![], operated_private_room_names: vec![], diff --git a/src/user.rs b/src/user.rs index aad9e54..3cd7ef5 100644 --- a/src/user.rs +++ b/src/user.rs @@ -50,7 +50,10 @@ impl UserMap { /// Looks up the given user name in the map, returning a mutable reference /// to the associated data if found, or an error if not found. - pub fn get_mut_strict(&mut self, user_name: &str) -> Result<&mut User, UserNotFoundError> { + pub fn get_mut_strict( + &mut self, + user_name: &str, + ) -> Result<&mut User, UserNotFoundError> { match self.map.get_mut(user_name) { Some(user) => Ok(user), None => Err(UserNotFoundError { @@ -130,7 +133,8 @@ mod tests { fn set_get_all_privileged() { let mut users = UserMap::new(); - users.set_all_privileged(vec!["bleep".to_string(), "bloop".to_string()]); + users + .set_all_privileged(vec!["bleep".to_string(), "bloop".to_string()]); let mut privileged = users.get_all_privileged(); privileged.sort();