aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/model/guild/mod.rs8
-rw-r--r--tests/resources/guild_system_channel_id_missing.json23
-rw-r--r--tests/test_deser.rs7
3 files changed, 34 insertions, 4 deletions
diff --git a/src/model/guild/mod.rs b/src/model/guild/mod.rs
index 1011891..8b6ba9d 100644
--- a/src/model/guild/mod.rs
+++ b/src/model/guild/mod.rs
@@ -1509,10 +1509,10 @@ impl<'de> Deserialize<'de> for Guild {
Some(v) => Option::<String>::deserialize(v).map_err(DeError::custom)?,
None => None,
};
- let system_channel_id = map.remove("system_channel_id")
- .ok_or_else(|| DeError::custom("expected guild system_channel_id"))
- .and_then(Option::<ChannelId>::deserialize)
- .map_err(DeError::custom)?;
+ let system_channel_id = match map.remove("system_channel_id") {
+ Some(v) => Option::<ChannelId>::deserialize(v).map_err(DeError::custom)?,
+ None => None,
+ };
let verification_level = map.remove("verification_level")
.ok_or_else(|| DeError::custom("expected guild verification_level"))
.and_then(VerificationLevel::deserialize)
diff --git a/tests/resources/guild_system_channel_id_missing.json b/tests/resources/guild_system_channel_id_missing.json
new file mode 100644
index 0000000..be5c89d
--- /dev/null
+++ b/tests/resources/guild_system_channel_id_missing.json
@@ -0,0 +1,23 @@
+{
+ "id": "244567637332328449",
+ "name": "testtest",
+ "icon": "3af6e2ebf46e85158a5fbc1a4f934bd6",
+ "owner_id": "114941315417899012",
+ "region": "us-east",
+ "afk_timeout": 60,
+ "verification_level": 2,
+ "roles": [],
+ "emojis": [],
+ "features": [],
+ "large": false,
+ "voice_states": [],
+ "unavailable": false,
+ "member_count": 1337,
+ "members": [],
+ "channels": [],
+ "presences": [],
+ "default_message_notifications": 1,
+ "explicit_content_filter": 0,
+ "joined_at": "2017-12-12T00:10:08.769400+00:00",
+ "mfa_level": 0
+}
diff --git a/tests/test_deser.rs b/tests/test_deser.rs
index b17fe3c..ae9536b 100644
--- a/tests/test_deser.rs
+++ b/tests/test_deser.rs
@@ -178,3 +178,10 @@ fn message_type_7() {
fn guild_features_deser() {
p!(GuildCreateEvent, "guild_create_features");
}
+
+// Ensure that `Guild`s still deserialize despite the `system_channel_id` key
+// missing.
+#[test]
+fn guild_system_channel_id_missing() {
+ p!(Guild, "guild_system_channel_id_missing");
+}