twilight_model/guild/audit_log/
optional_entry_info.rs

1use crate::{
2    guild::GuildIntegrationType,
3    id::{
4        marker::{ChannelMarker, GenericMarker, MessageMarker},
5        Id,
6    },
7};
8use serde::{Deserialize, Serialize};
9
10/// Additional information for certain [`AuditLogEventType`]s.
11///
12/// [`AuditLogEventType`]: super::AuditLogEventType
13#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
14pub struct AuditLogOptionalEntryInfo {
15    /// Name of the Auto Moderation rule that was triggered.
16    ///
17    /// The following events have this option:
18    ///
19    /// - [`AuditLogEventType::AutoModerationBlockMessage`]
20    /// - [`AuditLogEventType::AutoModerationFlagToChannel`]
21    /// - [`AuditLogEventType::AutoModerationUserCommunicationDisabled`]
22    ///
23    /// [`AuditLogEventType::AutoModerationBlockMessage`]: super::AuditLogEventType::AutoModerationBlockMessage
24    /// [`AuditLogEventType::AutoModerationFlagToChannel`]: super::AuditLogEventType::AutoModerationFlagToChannel
25    /// [`AuditLogEventType::AutoModerationUserCommunicationDisabled`]: super::AuditLogEventType::AutoModerationUserCommunicationDisabled
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub auto_moderation_rule_name: Option<String>,
28    /// Trigger type of the Auto Moderation rule that was triggered.
29    ///
30    /// The following events have this option:
31    ///
32    /// - [`AuditLogEventType::AutoModerationBlockMessage`]
33    /// - [`AuditLogEventType::AutoModerationFlagToChannel`]
34    /// - [`AuditLogEventType::AutoModerationUserCommunicationDisabled`]
35    ///
36    /// [`AuditLogEventType::AutoModerationBlockMessage`]: super::AuditLogEventType::AutoModerationBlockMessage
37    /// [`AuditLogEventType::AutoModerationFlagToChannel`]: super::AuditLogEventType::AutoModerationFlagToChannel
38    /// [`AuditLogEventType::AutoModerationUserCommunicationDisabled`]: super::AuditLogEventType::AutoModerationUserCommunicationDisabled
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub auto_moderation_rule_trigger_type: Option<String>,
41    /// Channel in which the entities were targeted.
42    ///
43    /// The following events have this option:
44    ///
45    /// - [`AuditLogEventType::AutoModerationBlockMessage`]
46    /// - [`AuditLogEventType::AutoModerationFlagToChannel`]
47    /// - [`AuditLogEventType::AutoModerationUserCommunicationDisabled`]
48    /// - [`AuditLogEventType::MemberMove`]
49    /// - [`AuditLogEventType::MessageDelete`]
50    /// - [`AuditLogEventType::MessagePin`]
51    /// - [`AuditLogEventType::MessageUnpin`]
52    /// - [`AuditLogEventType::StageInstanceCreate`]
53    /// - [`AuditLogEventType::StageInstanceDelete`]
54    /// - [`AuditLogEventType::StageInstanceUpdate`]
55    ///
56    /// [`AuditLogEventType::AutoModerationBlockMessage`]: super::AuditLogEventType::AutoModerationBlockMessage
57    /// [`AuditLogEventType::AutoModerationFlagToChannel`]: super::AuditLogEventType::AutoModerationFlagToChannel
58    /// [`AuditLogEventType::AutoModerationUserCommunicationDisabled`]: super::AuditLogEventType::AutoModerationUserCommunicationDisabled
59    /// [`AuditLogEventType::MemberMove`]: super::AuditLogEventType::MemberMove
60    /// [`AuditLogEventType::MessageDelete`]: super::AuditLogEventType::MessageDelete
61    /// [`AuditLogEventType::MessagePin`]: super::AuditLogEventType::MessagePin
62    /// [`AuditLogEventType::MessageUnpin`]: super::AuditLogEventType::MessageUnpin
63    /// [`AuditLogEventType::StageInstanceCreate`]: super::AuditLogEventType::StageInstanceCreate
64    /// [`AuditLogEventType::StageInstanceDelete`]: super::AuditLogEventType::StageInstanceDelete
65    /// [`AuditLogEventType::StageInstanceUpdate`]: super::AuditLogEventType::StageInstanceUpdate
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub channel_id: Option<Id<ChannelMarker>>,
68    /// Number of entities that were targeted.
69    ///
70    /// The following events have this option:
71    ///
72    /// - [`AuditLogEventType::MemberDisconnect`]
73    /// - [`AuditLogEventType::MemberMove`]
74    /// - [`AuditLogEventType::MessageBulkDelete`]
75    /// - [`AuditLogEventType::MessageDelete`]
76    ///
77    /// [`AuditLogEventType::MemberDisconnect`]: super::AuditLogEventType::MemberDisconnect
78    /// [`AuditLogEventType::MemberMove`]: super::AuditLogEventType::MemberMove
79    /// [`AuditLogEventType::MessageBulkDelete`]: super::AuditLogEventType::MessageBulkDelete
80    /// [`AuditLogEventType::MessageDelete`]: super::AuditLogEventType::MessageDelete
81    #[serde(skip_serializing_if = "Option::is_none")]
82    pub count: Option<String>,
83    /// Specified number of days' worth of inactivity members must have in order
84    /// to be kicked.
85    ///
86    /// The following events have this option:
87    ///
88    /// - [`AuditLogEventType::MemberPrune`]
89    ///
90    /// [`AuditLogEventType::MemberPrune`]: super::AuditLogEventType::MemberPrune
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub delete_member_days: Option<String>,
93    /// ID of overwritten entity.
94    ///
95    /// The following events have this option:
96    ///
97    /// - [`AuditLogEventType::ChannelOverwriteCreate`]
98    /// - [`AuditLogEventType::ChannelOverwriteDelete`]
99    /// - [`AuditLogEventType::ChannelOverwriteUpdate`]
100    ///
101    /// [`AuditLogEventType::ChannelOverwriteCreate`]: super::AuditLogEventType::ChannelOverwriteCreate
102    /// [`AuditLogEventType::ChannelOverwriteDelete`]: super::AuditLogEventType::ChannelOverwriteDelete
103    /// [`AuditLogEventType::ChannelOverwriteUpdate`]: super::AuditLogEventType::ChannelOverwriteUpdate
104    pub id: Option<Id<GenericMarker>>,
105    /// Type of integration which performed the action.
106    ///
107    /// The following events have this option:
108    ///
109    /// - [`AuditLogEventType::MemberKick`]
110    /// - [`AuditLogEventType::MemberRoleUpdate`]
111    ///
112    /// [`AuditLogEventType::MemberKick`]: super::AuditLogEventType::MemberKick
113    /// [`AuditLogEventType::MemberRoleUpdate`]: super::AuditLogEventType::MemberRoleUpdate
114    #[serde(skip_serializing_if = "Option::is_none")]
115    pub integration_type: Option<GuildIntegrationType>,
116    /// Type of overwritten entity.
117    ///
118    /// The following events have this option:
119    ///
120    /// - [`AuditLogEventType::ChannelOverwriteCreate`]
121    /// - [`AuditLogEventType::ChannelOverwriteDelete`]
122    /// - [`AuditLogEventType::ChannelOverwriteUpdate`]
123    ///
124    /// [`AuditLogEventType::ChannelOverwriteCreate`]: super::AuditLogEventType::ChannelOverwriteCreate
125    /// [`AuditLogEventType::ChannelOverwriteDelete`]: super::AuditLogEventType::ChannelOverwriteDelete
126    /// [`AuditLogEventType::ChannelOverwriteUpdate`]: super::AuditLogEventType::ChannelOverwriteUpdate
127    #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
128    pub kind: Option<String>,
129    /// Number of members removed from a change.
130    ///
131    /// The following events have this option:
132    ///
133    /// - [`AuditLogEventType::MemberPrune`]
134    ///
135    /// [`AuditLogEventType::MemberPrune`]: super::AuditLogEventType::MemberPrune
136    #[serde(skip_serializing_if = "Option::is_none")]
137    pub members_removed: Option<String>,
138    /// ID of the affected message.
139    ///
140    /// The following events have this option:
141    ///
142    /// - [`AuditLogEventType::MessagePin`]
143    /// - [`AuditLogEventType::MessageUnpin`]
144    ///
145    /// [`AuditLogEventType::MessagePin`]: super::AuditLogEventType::MessagePin
146    /// [`AuditLogEventType::MessageUnpin`]: super::AuditLogEventType::MessageUnpin
147    #[serde(skip_serializing_if = "Option::is_none")]
148    pub message_id: Option<Id<MessageMarker>>,
149    /// Name of a role.
150    ///
151    /// The following events have this option:
152    ///
153    /// - [`AuditLogEventType::ChannelOverwriteCreate`]
154    /// - [`AuditLogEventType::ChannelOverwriteDelete`]
155    /// - [`AuditLogEventType::ChannelOverwriteUpdate`]
156    ///
157    /// [`AuditLogEventType::ChannelOverwriteCreate`]: super::AuditLogEventType::ChannelOverwriteCreate
158    /// [`AuditLogEventType::ChannelOverwriteDelete`]: super::AuditLogEventType::ChannelOverwriteDelete
159    /// [`AuditLogEventType::ChannelOverwriteUpdate`]: super::AuditLogEventType::ChannelOverwriteUpdate
160    #[serde(skip_serializing_if = "Option::is_none")]
161    pub role_name: Option<String>,
162}
163
164#[cfg(test)]
165mod tests {
166    use super::AuditLogOptionalEntryInfo;
167    use serde::{Deserialize, Serialize};
168    use static_assertions::{assert_fields, assert_impl_all};
169    use std::{fmt::Debug, hash::Hash};
170
171    assert_fields!(
172        AuditLogOptionalEntryInfo: channel_id,
173        count,
174        delete_member_days,
175        id,
176        kind,
177        members_removed,
178        message_id,
179        role_name
180    );
181    assert_impl_all!(
182        AuditLogOptionalEntryInfo: Clone,
183        Debug,
184        Deserialize<'static>,
185        Eq,
186        Hash,
187        PartialEq,
188        Send,
189        Serialize,
190        Sync
191    );
192}