serenity/model/guild/
integration.rs

1use crate::model::prelude::*;
2
3/// Various information about integrations.
4///
5/// [Discord docs](https://discord.com/developers/docs/resources/guild#integration-object),
6/// [extra fields 1](https://discord.com/developers/docs/topics/gateway-events#integration-create),
7/// [extra fields 2](https://discord.com/developers/docs/topics/gateway-events#integration-update),
8#[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))]
9#[derive(Clone, Debug, Deserialize, Serialize)]
10#[non_exhaustive]
11pub struct Integration {
12    pub id: IntegrationId,
13    pub name: String,
14    #[serde(rename = "type")]
15    pub kind: String,
16    pub enabled: bool,
17    pub syncing: Option<bool>,
18    pub role_id: Option<RoleId>,
19    pub enable_emoticons: Option<bool>,
20    #[serde(rename = "expire_behavior")]
21    pub expire_behaviour: Option<IntegrationExpireBehaviour>,
22    pub expire_grace_period: Option<u64>,
23    pub user: Option<User>,
24    pub account: IntegrationAccount,
25    pub synced_at: Option<Timestamp>,
26    pub subscriber_count: Option<u64>,
27    pub revoked: Option<bool>,
28    pub application: Option<IntegrationApplication>,
29    pub scopes: Option<Vec<Scope>>,
30    /// Only present in [`IntegrationCreateEvent`] and [`IntegrationUpdateEvent`].
31    pub guild_id: Option<GuildId>,
32}
33
34enum_number! {
35    /// The behavior once the integration expires.
36    ///
37    /// [Discord docs](https://discord.com/developers/docs/resources/guild#integration-object-integration-expire-behaviors).
38    #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)]
39    #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))]
40    #[serde(from = "u8", into = "u8")]
41    #[non_exhaustive]
42    pub enum IntegrationExpireBehaviour {
43        RemoveRole = 0,
44        Kick = 1,
45        _ => Unknown(u8),
46    }
47}
48
49impl From<Integration> for IntegrationId {
50    /// Gets the Id of integration.
51    fn from(integration: Integration) -> IntegrationId {
52        integration.id
53    }
54}
55
56/// Integration account object.
57///
58/// [Discord docs](https://discord.com/developers/docs/resources/guild#integration-account-object).
59#[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))]
60#[derive(Clone, Debug, Deserialize, Serialize)]
61#[non_exhaustive]
62pub struct IntegrationAccount {
63    pub id: String,
64    pub name: String,
65}
66
67/// Integration application object.
68///
69/// [Discord docs](https://discord.com/developers/docs/resources/guild#integration-application-object).
70#[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))]
71#[derive(Clone, Debug, Deserialize, Serialize)]
72#[non_exhaustive]
73pub struct IntegrationApplication {
74    pub id: ApplicationId,
75    pub name: String,
76    pub icon: Option<ImageHash>,
77    pub description: String,
78    pub bot: Option<User>,
79}