twilight_model/guild/audit_log/
integration.rs

1use crate::{
2    guild::IntegrationAccount,
3    id::{marker::IntegrationMarker, Id},
4    user::User,
5    util::Timestamp,
6};
7use serde::{Deserialize, Serialize};
8
9/// Information about a [guild integration] provided in an [audit log].
10///
11/// [audit log]: super::AuditLog
12/// [guild integration]: super::super::GuildIntegration
13#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
14pub struct AuditLogGuildIntegration {
15    /// Account of the integration.
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub account: Option<IntegrationAccount>,
18    /// Whether the integration is enabled.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub enabled: Option<bool>,
21    /// Behavior of expiring subscribers to the integration.
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub expire_behavior: Option<u64>,
24    /// Grace period before expiring users, in days.
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub expire_grace_period: Option<u64>,
27    /// ID of the integration.
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub id: Option<Id<IntegrationMarker>>,
30    /// Type of integration.
31    #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
32    pub kind: Option<String>,
33    /// Name of the integration.
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub name: Option<String>,
36    /// ID that the integration uses for subscribers.
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub role_id: Option<Id<IntegrationMarker>>,
39    /// When the integration was last synced.
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub synced_at: Option<Timestamp>,
42    /// Whether the integration is syncing.
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub syncing: Option<bool>,
45    /// User for the integration.
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub user: Option<User>,
48}
49
50#[cfg(test)]
51mod tests {
52    use super::AuditLogGuildIntegration;
53    use serde::{Deserialize, Serialize};
54    use static_assertions::{assert_fields, assert_impl_all};
55    use std::{fmt::Debug, hash::Hash};
56
57    assert_fields!(
58        AuditLogGuildIntegration: account,
59        enabled,
60        expire_behavior,
61        expire_grace_period,
62        id,
63        kind,
64        name,
65        role_id,
66        synced_at,
67        syncing,
68        user
69    );
70    assert_impl_all!(
71        AuditLogGuildIntegration: Clone,
72        Debug,
73        Deserialize<'static>,
74        Eq,
75        Hash,
76        PartialEq,
77        Send,
78        Serialize,
79        Sync
80    );
81}