diff --git a/twilight-model/src/oauth/application.rs b/twilight-model/src/oauth/application.rs index a3c46f1ed8..db23964599 100644 --- a/twilight-model/src/oauth/application.rs +++ b/twilight-model/src/oauth/application.rs @@ -1,5 +1,5 @@ use super::{ - ApplicationFlags, InstallParams, + ApplicationFlags, EventWebhookStatus, InstallParams, application_integration_type::{ApplicationIntegrationMap, ApplicationIntegrationTypeConfig}, team::Team, }; @@ -38,6 +38,11 @@ pub struct Application { pub custom_install_url: Option, /// Description of the application. pub description: String, + /// If webhook events are enabled for the app. + pub event_webhooks_status: EventWebhookStatus, + /// Event webhooks URL for the app to receive webhook events. + #[serde(skip_serializing_if = "Option::is_none")] + pub event_webhooks_url: Option, /// Public flags of the application. pub flags: Option, /// Partial object of the associated guild. @@ -98,6 +103,7 @@ pub struct Application { #[cfg(test)] mod tests { use super::{Application, ApplicationFlags, Team, User}; + use crate::oauth::EventWebhookStatus; use crate::{id::Id, test::image_hash}; use serde::{Deserialize, Serialize}; use serde_test::Token; @@ -149,6 +155,8 @@ mod tests { cover_image: Some(image_hash::COVER), custom_install_url: None, description: "a pretty cool application".to_owned(), + event_webhooks_url: Some("https://eventwebhooks".into()), + event_webhooks_status: EventWebhookStatus::Enabled, flags: Some(ApplicationFlags::EMBEDDED), guild: None, guild_id: Some(Id::new(1)), @@ -207,7 +215,7 @@ mod tests { &[ Token::Struct { name: "Application", - len: 22, + len: 24, }, Token::Str("approximate_guild_count"), Token::Some, @@ -224,6 +232,11 @@ mod tests { Token::Str(image_hash::COVER_INPUT), Token::Str("description"), Token::Str("a pretty cool application"), + Token::Str("event_webhooks_status"), + Token::U8(2), + Token::Str("event_webhooks_url"), + Token::Some, + Token::Str("https://eventwebhooks"), Token::Str("flags"), Token::Some, Token::U64(131_072), diff --git a/twilight-model/src/oauth/current_authorization_information.rs b/twilight-model/src/oauth/current_authorization_information.rs index 4477a49689..e4f78672d9 100644 --- a/twilight-model/src/oauth/current_authorization_information.rs +++ b/twilight-model/src/oauth/current_authorization_information.rs @@ -35,7 +35,7 @@ pub struct CurrentAuthorizationInformation { mod tests { use crate::{ id::Id, - oauth::{Application, scope}, + oauth::{Application, EventWebhookStatus, scope}, test::image_hash, util::{Timestamp, datetime::TimestampParseError}, }; @@ -79,6 +79,8 @@ mod tests { cover_image: None, custom_install_url: None, description: DESCRIPTION.to_owned(), + event_webhooks_url: None, + event_webhooks_status: EventWebhookStatus::Disabled, flags: None, guild: None, guild_id: None, @@ -115,7 +117,7 @@ mod tests { Token::Str("application"), Token::Struct { name: "Application", - len: 12, + len: 13, }, Token::Str("approximate_guild_count"), Token::Some, @@ -129,6 +131,8 @@ mod tests { Token::Bool(true), Token::Str("description"), Token::Str(DESCRIPTION), + Token::Str("event_webhooks_status"), + Token::U8(1), Token::Str("flags"), Token::None, Token::Str("icon"), diff --git a/twilight-model/src/oauth/event_webhook.rs b/twilight-model/src/oauth/event_webhook.rs new file mode 100644 index 0000000000..6709f60557 --- /dev/null +++ b/twilight-model/src/oauth/event_webhook.rs @@ -0,0 +1,38 @@ +use serde::{Deserialize, Serialize}; + +/// Status indicating whether event webhooks are enabled or disabled for an application. +#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)] +#[non_exhaustive] +#[serde(from = "u8", into = "u8")] +pub enum EventWebhookStatus { + /// Event webhooks are disabled. + Disabled, + /// Event webhooks are enabled. + Enabled, + /// Event webhooks have been disabled by Discord due to inactivity. + DisabledByDiscord, + /// Variant value is unknown to the library. + Unknown(u8), +} + +impl From for EventWebhookStatus { + fn from(value: u8) -> Self { + match value { + 1 => Self::Disabled, + 2 => Self::Enabled, + 3 => Self::DisabledByDiscord, + _ => Self::Unknown(value), + } + } +} + +impl From for u8 { + fn from(value: EventWebhookStatus) -> Self { + match value { + EventWebhookStatus::Disabled => 1, + EventWebhookStatus::Enabled => 2, + EventWebhookStatus::DisabledByDiscord => 3, + EventWebhookStatus::Unknown(v) => v, + } + } +} diff --git a/twilight-model/src/oauth/mod.rs b/twilight-model/src/oauth/mod.rs index f056e2842e..0b07584460 100644 --- a/twilight-model/src/oauth/mod.rs +++ b/twilight-model/src/oauth/mod.rs @@ -5,6 +5,7 @@ mod application; mod application_flags; mod application_integration_type; mod current_authorization_information; +mod event_webhook; mod install_params; mod partial_application; @@ -15,6 +16,7 @@ pub use self::{ ApplicationIntegrationMap, ApplicationIntegrationType, ApplicationIntegrationTypeConfig, }, current_authorization_information::CurrentAuthorizationInformation, + event_webhook::EventWebhookStatus, install_params::InstallParams, partial_application::PartialApplication, };