diff options
Diffstat (limited to 'src/internal/ws_impl.rs')
| -rw-r--r-- | src/internal/ws_impl.rs | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/src/internal/ws_impl.rs b/src/internal/ws_impl.rs index 70c4cb7..8edb69b 100644 --- a/src/internal/ws_impl.rs +++ b/src/internal/ws_impl.rs @@ -7,7 +7,7 @@ use gateway::GatewayError; use internal::prelude::*; pub trait ReceiverExt { - fn recv_json<F, T>(&mut self, decode: F) -> Result<T> + fn recv_json<F, T>(&mut self, decode: F) -> Result<Option<T>> where F: Fn(Value) -> Result<T>; } @@ -16,11 +16,9 @@ pub trait SenderExt { } impl ReceiverExt for WsClient<TlsStream<TcpStream>> { - fn recv_json<F, T>(&mut self, decode: F) -> Result<T> + fn recv_json<F, T>(&mut self, decode: F) -> Result<Option<T>> where F: Fn(Value) -> Result<T> { - let message = self.recv_message()?; - - let res = match message { + Ok(match self.recv_message()? { OwnedMessage::Binary(bytes) => { let value = serde_json::from_reader(ZlibDecoder::new(&bytes[..]))?; @@ -30,9 +28,9 @@ impl ReceiverExt for WsClient<TlsStream<TcpStream>> { warn!("(╯°□°)╯︵ ┻━┻ Error decoding: {}", s); why - })) + })?) }, - OwnedMessage::Close(data) => Some(Err(Error::Gateway(GatewayError::Closed(data)))), + OwnedMessage::Close(data) => return Err(Error::Gateway(GatewayError::Closed(data))), OwnedMessage::Text(payload) => { let value = serde_json::from_str(&payload)?; @@ -40,7 +38,7 @@ impl ReceiverExt for WsClient<TlsStream<TcpStream>> { warn!("(╯°□°)╯︵ ┻━┻ Error decoding: {}", payload); why - })) + })?) }, OwnedMessage::Ping(x) => { self.send_message(&OwnedMessage::Pong(x)) @@ -49,14 +47,7 @@ impl ReceiverExt for WsClient<TlsStream<TcpStream>> { None }, OwnedMessage::Pong(_) => None, - }; - - // As to ignore the `None`s returned from `Ping` and `Pong`. - // Since they're essentially useless to us anyway. - match res { - Some(data) => data, - None => self.recv_json(decode), - } + }) } } |