serenity/model/guild/
integration.rs1use crate::model::prelude::*;
2
3#[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 pub guild_id: Option<GuildId>,
32}
33
34enum_number! {
35 #[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 fn from(integration: Integration) -> IntegrationId {
52 integration.id
53 }
54}
55
56#[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#[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}