aboutsummaryrefslogtreecommitdiff
path: root/src/model
diff options
context:
space:
mode:
authorZeyla Hellyer <[email protected]>2017-10-09 17:22:15 -0700
committerZeyla Hellyer <[email protected]>2017-10-09 17:22:15 -0700
commiteb9e8dfbc9d778de405d7369579d90c49a2bf90c (patch)
tree670260a6b61a0d9e5ea1c3f4f76e17c9a98f6cd3 /src/model
parentMake webhook_id a majour parameter in ratelimiting (diff)
downloadserenity-eb9e8dfbc9d778de405d7369579d90c49a2bf90c.tar.xz
serenity-eb9e8dfbc9d778de405d7369579d90c49a2bf90c.zip
Resume on resumable session invalidations
Session invalidations include whether the session may be resumable. Previously, this was not parsed by serenity. This data is now contained in `GatewayEvent::InvalidateSession` as a boolean, which constitutes a breaking change for users that manually handle gateway events. Upgrade path: Instead of pattern matching on simply the variant like so: ```rust use serenity::model::event::GatewayEvent; match gateway_event { GatewayEvent::InvalidateSession => { // work here }, // other matching arms here _ => {}, } ``` Instead pattern match it as a single field tuple-struct: ```rust use serenity::model::event::GatewayEvent; match gateway_event { GatewayEvent::InvalidateSession(resumable) => { // work here }, // other matching arms here _ => {}, } ```
Diffstat (limited to 'src/model')
-rw-r--r--src/model/event.rs13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/model/event.rs b/src/model/event.rs
index 7278bbb..fe65269 100644
--- a/src/model/event.rs
+++ b/src/model/event.rs
@@ -1060,7 +1060,8 @@ pub enum GatewayEvent {
Dispatch(u64, Event),
Heartbeat(u64),
Reconnect,
- InvalidateSession,
+ /// Whether the session can be resumed.
+ InvalidateSession(bool),
Hello(u64),
HeartbeatAck,
}
@@ -1096,7 +1097,15 @@ impl GatewayEvent {
GatewayEvent::Heartbeat(s)
},
OpCode::Reconnect => GatewayEvent::Reconnect,
- OpCode::InvalidSession => GatewayEvent::InvalidateSession,
+ OpCode::InvalidSession => {
+ let resumable = map.remove("d")
+ .ok_or_else(|| {
+ DeError::custom("expected gateway invalid session d")
+ })
+ .and_then(bool::deserialize)?;
+
+ GatewayEvent::InvalidateSession(resumable)
+ },
OpCode::Hello => {
let mut d = map.remove("d")
.ok_or_else(|| DeError::custom("expected gateway hello d"))