aboutsummaryrefslogtreecommitdiff
path: root/src/internal/ws_impl.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/internal/ws_impl.rs')
-rw-r--r--src/internal/ws_impl.rs23
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),
- }
+ })
}
}