diff --git a/twilight-gateway/src/error.rs b/twilight-gateway/src/error.rs index 98d757c149a..12e8936a3d8 100644 --- a/twilight-gateway/src/error.rs +++ b/twilight-gateway/src/error.rs @@ -50,7 +50,13 @@ impl Display for ProcessError { fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { match &self.kind { ProcessErrorType::Deserializing { event } => { - f.write_str("gateway event could not be deserialized: event=")?; + f.write_str("gateway event could not be deserialized: source=")?; + if let Some(source) = &self.source { + Display::fmt(source, f)?; + } else { + f.write_str("None")?; + } + f.write_str(", event=")?; f.write_str(event) } ProcessErrorType::SendingMessage => { @@ -161,7 +167,13 @@ impl Display for ReceiveMessageError { f.write_str("binary message could not be decompressed") } ReceiveMessageErrorType::Deserializing { ref event } => { - f.write_str("gateway event could not be deserialized: event=")?; + f.write_str("gateway event could not be deserialized: source=")?; + if let Some(source) = &self.source { + Display::fmt(source, f)?; + } else { + f.write_str("None")?; + } + f.write_str(", event=")?; f.write_str(event) } ReceiveMessageErrorType::FatallyClosed { close_code } => { diff --git a/twilight-model/src/application/command/mod.rs b/twilight-model/src/application/command/mod.rs index 056997f9162..9b09b54e221 100644 --- a/twilight-model/src/application/command/mod.rs +++ b/twilight-model/src/application/command/mod.rs @@ -68,6 +68,7 @@ pub struct Command { pub description_localizations: Option>, /// Guild ID of the command, if not global. #[serde(skip_serializing_if = "Option::is_none")] + #[serde(default)] pub guild_id: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub id: Option>, diff --git a/twilight-model/src/application/interaction/application_command/mod.rs b/twilight-model/src/application/interaction/application_command/mod.rs index 620610522f7..f8fc7a90a62 100644 --- a/twilight-model/src/application/interaction/application_command/mod.rs +++ b/twilight-model/src/application/interaction/application_command/mod.rs @@ -31,6 +31,7 @@ use serde::{Deserialize, Serialize}; pub struct CommandData { /// ID of the guild the command is registered to. #[serde(skip_serializing_if = "Option::is_none")] + #[serde(default)] pub guild_id: Option>, /// ID of the command. pub id: Id, diff --git a/twilight-model/src/application/interaction/mod.rs b/twilight-model/src/application/interaction/mod.rs index b7d60c44672..69732c549ab 100644 --- a/twilight-model/src/application/interaction/mod.rs +++ b/twilight-model/src/application/interaction/mod.rs @@ -77,6 +77,7 @@ pub struct Interaction { pub data: Option, /// ID of the guild the interaction was invoked in. #[serde(skip_serializing_if = "Option::is_none")] + #[serde(default)] pub guild_id: Option>, /// Guild’s preferred locale. /// diff --git a/twilight-model/src/channel/message/mod.rs b/twilight-model/src/channel/message/mod.rs index 0b4e18cb48d..cf66b15a4ce 100644 --- a/twilight-model/src/channel/message/mod.rs +++ b/twilight-model/src/channel/message/mod.rs @@ -129,6 +129,7 @@ pub struct Message { /// /// [`Guild`]: crate::guild::Guild #[serde(skip_serializing_if = "Option::is_none")] + #[serde(default)] pub guild_id: Option>, /// Id of the message. pub id: Id, diff --git a/twilight-model/src/channel/message/reference.rs b/twilight-model/src/channel/message/reference.rs index 3f6c6702a71..de3a003684d 100644 --- a/twilight-model/src/channel/message/reference.rs +++ b/twilight-model/src/channel/message/reference.rs @@ -15,6 +15,7 @@ pub struct MessageReference { pub channel_id: Option>, /// Originating message's guild ID. #[serde(skip_serializing_if = "Option::is_none")] + #[serde(default)] pub guild_id: Option>, /// Originating message's ID. #[serde(skip_serializing_if = "Option::is_none")] diff --git a/twilight-model/src/channel/message/sticker/mod.rs b/twilight-model/src/channel/message/sticker/mod.rs index fdd6da1b23e..ea57079d0e5 100644 --- a/twilight-model/src/channel/message/sticker/mod.rs +++ b/twilight-model/src/channel/message/sticker/mod.rs @@ -35,6 +35,7 @@ pub struct Sticker { pub format_type: StickerFormatType, /// ID of the guild that owns the sticker. #[serde(skip_serializing_if = "Option::is_none")] + #[serde(default)] pub guild_id: Option>, /// Unique ID of the sticker. pub id: Id, diff --git a/twilight-model/src/channel/mod.rs b/twilight-model/src/channel/mod.rs index 208a757fd34..03d5bd6f413 100644 --- a/twilight-model/src/channel/mod.rs +++ b/twilight-model/src/channel/mod.rs @@ -87,6 +87,7 @@ pub struct Channel { pub flags: Option, /// ID of the guild the channel is in. #[serde(skip_serializing_if = "Option::is_none")] + #[serde(default)] pub guild_id: Option>, /// Hash of the channel's icon. #[serde(skip_serializing_if = "Option::is_none")] diff --git a/twilight-model/src/channel/webhook/mod.rs b/twilight-model/src/channel/webhook/mod.rs index dcdee4fac3e..dad5dddbf97 100644 --- a/twilight-model/src/channel/webhook/mod.rs +++ b/twilight-model/src/channel/webhook/mod.rs @@ -21,6 +21,7 @@ pub struct Webhook { pub avatar: Option, pub channel_id: Id, #[serde(skip_serializing_if = "Option::is_none")] + #[serde(default)] pub guild_id: Option>, pub id: Id, #[serde(default = "WebhookType::default", rename = "type")] diff --git a/twilight-model/src/gateway/payload/incoming/message_delete.rs b/twilight-model/src/gateway/payload/incoming/message_delete.rs index 32b965d797a..276fad599db 100644 --- a/twilight-model/src/gateway/payload/incoming/message_delete.rs +++ b/twilight-model/src/gateway/payload/incoming/message_delete.rs @@ -8,6 +8,7 @@ use serde::{Deserialize, Serialize}; pub struct MessageDelete { pub channel_id: Id, #[serde(skip_serializing_if = "Option::is_none")] + #[serde(default)] pub guild_id: Option>, pub id: Id, } diff --git a/twilight-model/src/gateway/payload/incoming/message_delete_bulk.rs b/twilight-model/src/gateway/payload/incoming/message_delete_bulk.rs index 465540ceb37..5e0ec899342 100644 --- a/twilight-model/src/gateway/payload/incoming/message_delete_bulk.rs +++ b/twilight-model/src/gateway/payload/incoming/message_delete_bulk.rs @@ -8,6 +8,7 @@ use serde::{Deserialize, Serialize}; pub struct MessageDeleteBulk { pub channel_id: Id, #[serde(skip_serializing_if = "Option::is_none")] + #[serde(default)] pub guild_id: Option>, pub ids: Vec>, } diff --git a/twilight-model/src/gateway/payload/incoming/message_update.rs b/twilight-model/src/gateway/payload/incoming/message_update.rs index d5cf4659068..b06777da586 100644 --- a/twilight-model/src/gateway/payload/incoming/message_update.rs +++ b/twilight-model/src/gateway/payload/incoming/message_update.rs @@ -43,6 +43,7 @@ pub struct MessageUpdate { #[serde(skip_serializing_if = "Option::is_none")] pub embeds: Option>, #[serde(skip_serializing_if = "Option::is_none")] + #[serde(default)] pub guild_id: Option>, pub id: Id, #[serde(rename = "type", skip_serializing_if = "Option::is_none")] diff --git a/twilight-model/src/gateway/payload/incoming/reaction_remove_all.rs b/twilight-model/src/gateway/payload/incoming/reaction_remove_all.rs index 0807bcbc519..711158f8ece 100644 --- a/twilight-model/src/gateway/payload/incoming/reaction_remove_all.rs +++ b/twilight-model/src/gateway/payload/incoming/reaction_remove_all.rs @@ -9,5 +9,6 @@ pub struct ReactionRemoveAll { pub channel_id: Id, pub message_id: Id, #[serde(skip_serializing_if = "Option::is_none")] + #[serde(default)] pub guild_id: Option>, } diff --git a/twilight-model/src/gateway/payload/incoming/typing_start.rs b/twilight-model/src/gateway/payload/incoming/typing_start.rs index d27d755b94c..cd6ab10b32d 100644 --- a/twilight-model/src/gateway/payload/incoming/typing_start.rs +++ b/twilight-model/src/gateway/payload/incoming/typing_start.rs @@ -11,6 +11,7 @@ use serde::{Deserialize, Serialize}; pub struct TypingStart { pub channel_id: Id, #[serde(skip_serializing_if = "Option::is_none")] + #[serde(default)] pub guild_id: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub member: Option, diff --git a/twilight-model/src/gateway/presence/mod.rs b/twilight-model/src/gateway/presence/mod.rs index 1c1ce303900..0acafa9e8f1 100644 --- a/twilight-model/src/gateway/presence/mod.rs +++ b/twilight-model/src/gateway/presence/mod.rs @@ -67,6 +67,7 @@ pub(crate) struct PresenceIntermediary { #[serde(default)] pub activities: Vec, pub client_status: ClientStatus, + #[serde(default)] pub guild_id: Option>, pub nick: Option, pub status: Status, diff --git a/twilight-model/src/gateway/reaction.rs b/twilight-model/src/gateway/reaction.rs index 3c2c4cf1250..42ef7c60928 100644 --- a/twilight-model/src/gateway/reaction.rs +++ b/twilight-model/src/gateway/reaction.rs @@ -12,6 +12,7 @@ use serde::{Deserialize, Serialize}; pub struct GatewayReaction { pub channel_id: Id, pub emoji: ReactionType, + #[serde(default)] pub guild_id: Option>, pub member: Option, pub message_id: Id, diff --git a/twilight-model/src/guild/audit_log/entry.rs b/twilight-model/src/guild/audit_log/entry.rs index f9dfe211f83..7012b746bad 100644 --- a/twilight-model/src/guild/audit_log/entry.rs +++ b/twilight-model/src/guild/audit_log/entry.rs @@ -22,6 +22,7 @@ pub struct AuditLogEntry { /// /// [`GuildAuditLogEntryCreate`]: crate::gateway::payload::incoming::GuildAuditLogEntryCreate #[serde(skip_serializing_if = "Option::is_none")] + #[serde(default)] pub guild_id: Option>, /// ID of the entire entry. pub id: Id, diff --git a/twilight-model/src/guild/integration.rs b/twilight-model/src/guild/integration.rs index 17135507c31..db27752d0a3 100644 --- a/twilight-model/src/guild/integration.rs +++ b/twilight-model/src/guild/integration.rs @@ -27,6 +27,7 @@ pub struct GuildIntegration { #[serde(skip_serializing_if = "Option::is_none")] pub expire_grace_period: Option, #[serde(skip_serializing_if = "Option::is_none")] + #[serde(default)] pub guild_id: Option>, pub id: Id, #[serde(rename = "type")] diff --git a/twilight-model/src/oauth/application.rs b/twilight-model/src/oauth/application.rs index f1054d6dc34..66f676ae60a 100644 --- a/twilight-model/src/oauth/application.rs +++ b/twilight-model/src/oauth/application.rs @@ -20,6 +20,7 @@ pub struct Application { pub custom_install_url: Option, /// Description of the application. pub description: String, + #[serde(default)] pub guild_id: Option>, /// Public flags of the application. pub flags: Option, diff --git a/twilight-model/src/voice/voice_state.rs b/twilight-model/src/voice/voice_state.rs index 32f505d5959..81d1ed5b886 100644 --- a/twilight-model/src/voice/voice_state.rs +++ b/twilight-model/src/voice/voice_state.rs @@ -20,6 +20,7 @@ pub struct VoiceState { pub deaf: bool, /// Guild this voice state is for. #[serde(skip_serializing_if = "Option::is_none")] + #[serde(default)] pub guild_id: Option>, /// Member this voice state is for. #[serde(skip_serializing_if = "Option::is_none")]