diff options
| -rw-r--r-- | src/model/guild/mod.rs | 8 | ||||
| -rw-r--r-- | tests/resources/guild_system_channel_id_missing.json | 23 | ||||
| -rw-r--r-- | tests/test_deser.rs | 7 |
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"); +} |