1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
7#[serde(from = "u16", into = "u16")]
8pub enum AuditLogEventType {
9 GuildUpdate,
13 ChannelCreate,
17 ChannelUpdate,
21 ChannelDelete,
25 ChannelOverwriteCreate,
30 ChannelOverwriteUpdate,
35 ChannelOverwriteDelete,
40 MemberKick,
44 MemberPrune,
48 MemberBanAdd,
52 MemberBanRemove,
57 MemberUpdate,
61 MemberRoleUpdate,
66 MemberMove,
71 MemberDisconnect,
76 BotAdd,
81 RoleCreate,
85 RoleUpdate,
89 RoleDelete,
93 InviteCreate,
97 InviteUpdate,
101 InviteDelete,
105 WebhookCreate,
109 WebhookUpdate,
113 WebhookDelete,
117 EmojiCreate,
121 EmojiUpdate,
125 EmojiDelete,
129 MessageDelete,
133 MessageBulkDelete,
137 MessagePin,
142 MessageUnpin,
147 IntegrationCreate,
151 IntegrationUpdate,
155 IntegrationDelete,
159 StageInstanceCreate,
163 StageInstanceUpdate,
167 StageInstanceDelete,
171 StickerCreate,
175 StickerUpdate,
179 StickerDelete,
183 GuildScheduledEventCreate,
187 GuildScheduledEventUpdate,
191 GuildScheduledEventDelete,
195 ThreadCreate,
199 ThreadUpdate,
203 ThreadDelete,
207 ApplicationCommandPermissionUpdate,
211 AutoModerationRuleCreate,
215 AutoModerationRuleUpdate,
219 AutoModerationRuleDelete,
223 AutoModerationBlockMessage,
225 AutoModerationFlagToChannel,
227 AutoModerationUserCommunicationDisabled,
229 CreatorMonetizationRequestCreated,
231 CreatorMonetizationTermsAccepted,
233 Unknown(u16),
235}
236
237impl From<u16> for AuditLogEventType {
238 fn from(value: u16) -> Self {
239 match value {
240 1 => AuditLogEventType::GuildUpdate,
241 10 => AuditLogEventType::ChannelCreate,
242 11 => AuditLogEventType::ChannelUpdate,
243 12 => AuditLogEventType::ChannelDelete,
244 13 => AuditLogEventType::ChannelOverwriteCreate,
245 14 => AuditLogEventType::ChannelOverwriteUpdate,
246 15 => AuditLogEventType::ChannelOverwriteDelete,
247 20 => AuditLogEventType::MemberKick,
248 21 => AuditLogEventType::MemberPrune,
249 22 => AuditLogEventType::MemberBanAdd,
250 23 => AuditLogEventType::MemberBanRemove,
251 24 => AuditLogEventType::MemberUpdate,
252 25 => AuditLogEventType::MemberRoleUpdate,
253 26 => AuditLogEventType::MemberMove,
254 17 => AuditLogEventType::MemberDisconnect,
255 28 => AuditLogEventType::BotAdd,
256 30 => AuditLogEventType::RoleCreate,
257 31 => AuditLogEventType::RoleUpdate,
258 32 => AuditLogEventType::RoleDelete,
259 40 => AuditLogEventType::InviteCreate,
260 41 => AuditLogEventType::InviteUpdate,
261 42 => AuditLogEventType::InviteDelete,
262 50 => AuditLogEventType::WebhookCreate,
263 51 => AuditLogEventType::WebhookUpdate,
264 52 => AuditLogEventType::WebhookDelete,
265 60 => AuditLogEventType::EmojiCreate,
266 61 => AuditLogEventType::EmojiUpdate,
267 62 => AuditLogEventType::EmojiDelete,
268 72 => AuditLogEventType::MessageDelete,
269 73 => AuditLogEventType::MessageBulkDelete,
270 74 => AuditLogEventType::MessagePin,
271 75 => AuditLogEventType::MessageUnpin,
272 80 => AuditLogEventType::IntegrationCreate,
273 81 => AuditLogEventType::IntegrationUpdate,
274 82 => AuditLogEventType::IntegrationDelete,
275 83 => AuditLogEventType::StageInstanceCreate,
276 84 => AuditLogEventType::StageInstanceUpdate,
277 85 => AuditLogEventType::StageInstanceDelete,
278 90 => AuditLogEventType::StickerCreate,
279 91 => AuditLogEventType::StickerUpdate,
280 92 => AuditLogEventType::StickerDelete,
281 100 => AuditLogEventType::GuildScheduledEventCreate,
282 101 => AuditLogEventType::GuildScheduledEventUpdate,
283 102 => AuditLogEventType::GuildScheduledEventDelete,
284 110 => AuditLogEventType::ThreadCreate,
285 111 => AuditLogEventType::ThreadUpdate,
286 112 => AuditLogEventType::ThreadDelete,
287 121 => AuditLogEventType::ApplicationCommandPermissionUpdate,
288 140 => AuditLogEventType::AutoModerationRuleCreate,
289 141 => AuditLogEventType::AutoModerationRuleUpdate,
290 142 => AuditLogEventType::AutoModerationRuleDelete,
291 143 => AuditLogEventType::AutoModerationBlockMessage,
292 144 => AuditLogEventType::AutoModerationFlagToChannel,
293 145 => AuditLogEventType::AutoModerationUserCommunicationDisabled,
294 150 => AuditLogEventType::CreatorMonetizationRequestCreated,
295 151 => AuditLogEventType::CreatorMonetizationTermsAccepted,
296 unknown => AuditLogEventType::Unknown(unknown),
297 }
298 }
299}
300
301impl From<AuditLogEventType> for u16 {
302 fn from(value: AuditLogEventType) -> Self {
303 match value {
304 AuditLogEventType::GuildUpdate => 1,
305 AuditLogEventType::ChannelCreate => 10,
306 AuditLogEventType::ChannelUpdate => 11,
307 AuditLogEventType::ChannelDelete => 12,
308 AuditLogEventType::ChannelOverwriteCreate => 13,
309 AuditLogEventType::ChannelOverwriteUpdate => 14,
310 AuditLogEventType::ChannelOverwriteDelete => 15,
311 AuditLogEventType::MemberKick => 20,
312 AuditLogEventType::MemberPrune => 21,
313 AuditLogEventType::MemberBanAdd => 22,
314 AuditLogEventType::MemberBanRemove => 23,
315 AuditLogEventType::MemberUpdate => 24,
316 AuditLogEventType::MemberRoleUpdate => 25,
317 AuditLogEventType::MemberMove => 26,
318 AuditLogEventType::MemberDisconnect => 27,
319 AuditLogEventType::BotAdd => 28,
320 AuditLogEventType::RoleCreate => 30,
321 AuditLogEventType::RoleUpdate => 31,
322 AuditLogEventType::RoleDelete => 32,
323 AuditLogEventType::InviteCreate => 40,
324 AuditLogEventType::InviteUpdate => 41,
325 AuditLogEventType::InviteDelete => 42,
326 AuditLogEventType::WebhookCreate => 50,
327 AuditLogEventType::WebhookUpdate => 51,
328 AuditLogEventType::WebhookDelete => 52,
329 AuditLogEventType::EmojiCreate => 60,
330 AuditLogEventType::EmojiUpdate => 61,
331 AuditLogEventType::EmojiDelete => 62,
332 AuditLogEventType::MessageDelete => 72,
333 AuditLogEventType::MessageBulkDelete => 73,
334 AuditLogEventType::MessagePin => 74,
335 AuditLogEventType::MessageUnpin => 75,
336 AuditLogEventType::IntegrationCreate => 80,
337 AuditLogEventType::IntegrationUpdate => 81,
338 AuditLogEventType::IntegrationDelete => 82,
339 AuditLogEventType::StageInstanceCreate => 83,
340 AuditLogEventType::StageInstanceUpdate => 84,
341 AuditLogEventType::StageInstanceDelete => 85,
342 AuditLogEventType::StickerCreate => 90,
343 AuditLogEventType::StickerUpdate => 91,
344 AuditLogEventType::StickerDelete => 92,
345 AuditLogEventType::GuildScheduledEventCreate => 100,
346 AuditLogEventType::GuildScheduledEventUpdate => 101,
347 AuditLogEventType::GuildScheduledEventDelete => 102,
348 AuditLogEventType::ThreadCreate => 110,
349 AuditLogEventType::ThreadUpdate => 111,
350 AuditLogEventType::ThreadDelete => 112,
351 AuditLogEventType::ApplicationCommandPermissionUpdate => 121,
352 AuditLogEventType::AutoModerationRuleCreate => 140,
353 AuditLogEventType::AutoModerationRuleUpdate => 141,
354 AuditLogEventType::AutoModerationRuleDelete => 142,
355 AuditLogEventType::AutoModerationBlockMessage => 143,
356 AuditLogEventType::AutoModerationFlagToChannel => 144,
357 AuditLogEventType::AutoModerationUserCommunicationDisabled => 145,
358 AuditLogEventType::CreatorMonetizationRequestCreated => 150,
359 AuditLogEventType::CreatorMonetizationTermsAccepted => 151,
360 AuditLogEventType::Unknown(unknown) => unknown,
361 }
362 }
363}
364
365#[cfg(test)]
366mod tests {
367 use super::AuditLogEventType;
368 use serde::{Deserialize, Serialize};
369 use static_assertions::assert_impl_all;
370 use std::{fmt::Debug, hash::Hash};
371
372 assert_impl_all!(
373 AuditLogEventType: Clone,
374 Copy,
375 Debug,
376 Deserialize<'static>,
377 Eq,
378 Hash,
379 PartialEq,
380 Send,
381 Serialize,
382 Sync,
383 );
384
385 #[test]
386 fn test_values() {
387 assert_eq!(1, u16::from(AuditLogEventType::GuildUpdate));
388 assert_eq!(10, u16::from(AuditLogEventType::ChannelCreate));
389 assert_eq!(11, u16::from(AuditLogEventType::ChannelUpdate));
390 assert_eq!(12, u16::from(AuditLogEventType::ChannelDelete));
391 assert_eq!(13, u16::from(AuditLogEventType::ChannelOverwriteCreate));
392 assert_eq!(14, u16::from(AuditLogEventType::ChannelOverwriteUpdate));
393 assert_eq!(15, u16::from(AuditLogEventType::ChannelOverwriteDelete));
394 assert_eq!(20, u16::from(AuditLogEventType::MemberKick));
395 assert_eq!(21, u16::from(AuditLogEventType::MemberPrune));
396 assert_eq!(22, u16::from(AuditLogEventType::MemberBanAdd));
397 assert_eq!(23, u16::from(AuditLogEventType::MemberBanRemove));
398 assert_eq!(24, u16::from(AuditLogEventType::MemberUpdate));
399 assert_eq!(25, u16::from(AuditLogEventType::MemberRoleUpdate));
400 assert_eq!(26, u16::from(AuditLogEventType::MemberMove));
401 assert_eq!(27, u16::from(AuditLogEventType::MemberDisconnect));
402 assert_eq!(28, u16::from(AuditLogEventType::BotAdd));
403 assert_eq!(30, u16::from(AuditLogEventType::RoleCreate));
404 assert_eq!(31, u16::from(AuditLogEventType::RoleUpdate));
405 assert_eq!(32, u16::from(AuditLogEventType::RoleDelete));
406 assert_eq!(40, u16::from(AuditLogEventType::InviteCreate));
407 assert_eq!(41, u16::from(AuditLogEventType::InviteUpdate));
408 assert_eq!(42, u16::from(AuditLogEventType::InviteDelete));
409 assert_eq!(50, u16::from(AuditLogEventType::WebhookCreate));
410 assert_eq!(51, u16::from(AuditLogEventType::WebhookUpdate));
411 assert_eq!(52, u16::from(AuditLogEventType::WebhookDelete));
412 assert_eq!(60, u16::from(AuditLogEventType::EmojiCreate));
413 assert_eq!(61, u16::from(AuditLogEventType::EmojiUpdate));
414 assert_eq!(62, u16::from(AuditLogEventType::EmojiDelete));
415 assert_eq!(72, u16::from(AuditLogEventType::MessageDelete));
416 assert_eq!(73, u16::from(AuditLogEventType::MessageBulkDelete));
417 assert_eq!(74, u16::from(AuditLogEventType::MessagePin));
418 assert_eq!(75, u16::from(AuditLogEventType::MessageUnpin));
419 assert_eq!(80, u16::from(AuditLogEventType::IntegrationCreate));
420 assert_eq!(81, u16::from(AuditLogEventType::IntegrationUpdate));
421 assert_eq!(82, u16::from(AuditLogEventType::IntegrationDelete));
422 assert_eq!(83, u16::from(AuditLogEventType::StageInstanceCreate));
423 assert_eq!(84, u16::from(AuditLogEventType::StageInstanceUpdate));
424 assert_eq!(90, u16::from(AuditLogEventType::StickerCreate));
425 assert_eq!(91, u16::from(AuditLogEventType::StickerUpdate));
426 assert_eq!(92, u16::from(AuditLogEventType::StickerDelete));
427 assert_eq!(100, u16::from(AuditLogEventType::GuildScheduledEventCreate));
428 assert_eq!(101, u16::from(AuditLogEventType::GuildScheduledEventUpdate));
429 assert_eq!(102, u16::from(AuditLogEventType::GuildScheduledEventDelete));
430 assert_eq!(110, u16::from(AuditLogEventType::ThreadCreate));
431 assert_eq!(111, u16::from(AuditLogEventType::ThreadUpdate));
432 assert_eq!(112, u16::from(AuditLogEventType::ThreadDelete));
433 assert_eq!(
434 121,
435 u16::from(AuditLogEventType::ApplicationCommandPermissionUpdate)
436 );
437 assert_eq!(140, u16::from(AuditLogEventType::AutoModerationRuleCreate));
438 assert_eq!(141, u16::from(AuditLogEventType::AutoModerationRuleUpdate));
439 assert_eq!(142, u16::from(AuditLogEventType::AutoModerationRuleDelete));
440 assert_eq!(
441 143,
442 u16::from(AuditLogEventType::AutoModerationBlockMessage)
443 );
444 assert_eq!(
445 144,
446 u16::from(AuditLogEventType::AutoModerationFlagToChannel)
447 );
448 assert_eq!(
449 145,
450 u16::from(AuditLogEventType::AutoModerationUserCommunicationDisabled)
451 );
452 assert_eq!(
453 150,
454 u16::from(AuditLogEventType::CreatorMonetizationRequestCreated)
455 );
456 assert_eq!(
457 151,
458 u16::from(AuditLogEventType::CreatorMonetizationTermsAccepted)
459 );
460 assert_eq!(250, u16::from(AuditLogEventType::Unknown(250)));
461 }
462}