diff options
| author | Zeyla Hellyer <[email protected]> | 2017-11-19 09:53:59 -0800 |
|---|---|---|
| committer | Zeyla Hellyer <[email protected]> | 2017-11-19 09:53:59 -0800 |
| commit | c3aa63faee8b3ae6d5126aa27a74876766c61e4c (patch) | |
| tree | 560ae5fcf011a8bb7cbaa5e4a5fc3bb2ee89ee31 /src/internal/ws_impl.rs | |
| parent | Add `model::Reaction::user` (diff) | |
| download | serenity-c3aa63faee8b3ae6d5126aa27a74876766c61e4c.tar.xz serenity-c3aa63faee8b3ae6d5126aa27a74876766c61e4c.zip | |
Implement Deserialize for {,Gateway,Voice}Event
Implement Deserialize for `model::event::GatewayEvent` and
`model::event::VoiceEvent`, and derive it for `model::event::Event`.
Due to the natural potential slowness of deserializing into`Event`
(attempting to deserialize into each variant until successful), a
function named `model::event::deserialize_event_with_type` is provided
for quickly deserializing into a known type if the dispatch type is
known.
Diffstat (limited to 'src/internal/ws_impl.rs')
| -rw-r--r-- | src/internal/ws_impl.rs | 24 |
1 files changed, 4 insertions, 20 deletions
diff --git a/src/internal/ws_impl.rs b/src/internal/ws_impl.rs index c1ac83b..8988e06 100644 --- a/src/internal/ws_impl.rs +++ b/src/internal/ws_impl.rs @@ -7,8 +7,7 @@ use websocket::sync::stream::{TcpStream, TlsStream}; use websocket::sync::Client as WsClient; pub trait ReceiverExt { - fn recv_json<F, T>(&mut self, decode: F) -> Result<Option<T>> - where F: Fn(Value) -> Result<T>; + fn recv_json(&mut self) -> Result<Option<Value>>; } pub trait SenderExt { @@ -16,29 +15,14 @@ pub trait SenderExt { } impl ReceiverExt for WsClient<TlsStream<TcpStream>> { - fn recv_json<F, T>(&mut self, decode: F) -> Result<Option<T>> - where F: Fn(Value) -> Result<T> { + fn recv_json(&mut self) -> Result<Option<Value>> { Ok(match self.recv_message()? { OwnedMessage::Binary(bytes) => { - let value = serde_json::from_reader(ZlibDecoder::new(&bytes[..]))?; - - Some(decode(value).map_err(|why| { - let s = String::from_utf8_lossy(&bytes); - - warn!("(╯°□°)╯︵ ┻━┻ Error decoding: {}", s); - - why - })?) + serde_json::from_reader(ZlibDecoder::new(&bytes[..])).map(Some)? }, OwnedMessage::Close(data) => return Err(Error::Gateway(GatewayError::Closed(data))), OwnedMessage::Text(payload) => { - let value = serde_json::from_str(&payload)?; - - Some(decode(value).map_err(|why| { - warn!("(╯°□°)╯︵ ┻━┻ Error decoding: {}", payload); - - why - })?) + serde_json::from_str(&payload).map(Some)? }, OwnedMessage::Ping(x) => { self.send_message(&OwnedMessage::Pong(x)) |