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}