aboutsummaryrefslogtreecommitdiff
path: root/src/internal
diff options
context:
space:
mode:
authorZeyla Hellyer <[email protected]>2017-09-24 15:48:02 -0700
committerZeyla Hellyer <[email protected]>2017-09-24 15:53:23 -0700
commit6c43fed3702be3fdc1eafed26a2f6335acd71843 (patch)
treee3dd142b36f221f33fb8e35c511bbf4e9e9471b6 /src/internal
parentUse $crate for CommandError (diff)
downloadserenity-6c43fed3702be3fdc1eafed26a2f6335acd71843.tar.xz
serenity-6c43fed3702be3fdc1eafed26a2f6335acd71843.zip
Add a shard manager
The shard manager will queue up shards for booting.
Diffstat (limited to 'src/internal')
-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),
- }
+ })
}
}