1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
5#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
6pub enum EventType {
7 AutoModerationActionExecution,
8 AutoModerationRuleCreate,
9 AutoModerationRuleDelete,
10 AutoModerationRuleUpdate,
11 #[serde(rename = "GUILD_BAN_ADD")]
12 BanAdd,
13 #[serde(rename = "GUILD_BAN_REMOVE")]
14 BanRemove,
15 ChannelCreate,
16 ChannelDelete,
17 ChannelPinsUpdate,
18 ChannelUpdate,
19 #[serde(rename = "APPLICATION_COMMAND_PERMISSIONS_UPDATE")]
20 CommandPermissionsUpdate,
21 EntitlementCreate,
22 EntitlementDelete,
23 EntitlementUpdate,
24 GatewayClose,
25 GatewayHeartbeat,
26 GatewayHeartbeatAck,
27 GatewayHello,
28 GatewayInvalidateSession,
29 GatewayReconnect,
30 GuildAuditLogEntryCreate,
31 GuildCreate,
32 GuildDelete,
33 GuildEmojisUpdate,
34 GuildIntegrationsUpdate,
35 GuildScheduledEventCreate,
36 GuildScheduledEventDelete,
37 GuildScheduledEventUpdate,
38 GuildScheduledEventUserAdd,
39 GuildScheduledEventUserRemove,
40 GuildStickersUpdate,
41 GuildUpdate,
42 IntegrationCreate,
43 IntegrationDelete,
44 IntegrationUpdate,
45 InteractionCreate,
46 InviteCreate,
47 InviteDelete,
48 #[serde(rename = "GUILD_MEMBER_ADD")]
49 MemberAdd,
50 #[serde(rename = "GUILD_MEMBERS_CHUNK")]
51 MemberChunk,
52 #[serde(rename = "GUILD_MEMBER_REMOVE")]
53 MemberRemove,
54 #[serde(rename = "GUILD_MEMBER_UPDATE")]
55 MemberUpdate,
56 MessageCreate,
57 MessageDelete,
58 MessageDeleteBulk,
59 MessagePollVoteAdd,
60 MessagePollVoteRemove,
61 MessageUpdate,
62 PresenceUpdate,
63 RateLimited,
64 #[serde(rename = "MESSAGE_REACTION_ADD")]
65 ReactionAdd,
66 #[serde(rename = "MESSAGE_REACTION_REMOVE")]
67 ReactionRemove,
68 #[serde(rename = "MESSAGE_REACTION_REMOVE_ALL")]
69 ReactionRemoveAll,
70 #[serde(rename = "MESSAGE_REACTION_REMOVE_EMOJI")]
71 ReactionRemoveEmoji,
72 Ready,
73 Resumed,
74 #[serde(rename = "GUILD_ROLE_CREATE")]
75 RoleCreate,
76 #[serde(rename = "GUILD_ROLE_DELETE")]
77 RoleDelete,
78 #[serde(rename = "GUILD_ROLE_UPDATE")]
79 RoleUpdate,
80 StageInstanceCreate,
81 StageInstanceDelete,
82 StageInstanceUpdate,
83 SubscriptionCreate,
84 SubscriptionDelete,
85 SubscriptionUpdate,
86 ThreadCreate,
87 ThreadDelete,
88 ThreadListSync,
89 ThreadMemberUpdate,
90 ThreadMembersUpdate,
91 ThreadUpdate,
92 TypingStart,
93 UnavailableGuild,
94 UserUpdate,
95 VoiceServerUpdate,
96 VoiceStateUpdate,
97 WebhooksUpdate,
98}
99
100impl EventType {
101 pub const fn name(self) -> Option<&'static str> {
102 match self {
103 Self::AutoModerationActionExecution => Some("AUTO_MODERATION_ACTION_EXECUTION"),
104 Self::AutoModerationRuleCreate => Some("AUTO_MODERATION_RULE_CREATE"),
105 Self::AutoModerationRuleDelete => Some("AUTO_MODERATION_RULE_DELETE"),
106 Self::AutoModerationRuleUpdate => Some("AUTO_MODERATION_RULE_UPDATE"),
107 Self::BanAdd => Some("GUILD_BAN_ADD"),
108 Self::BanRemove => Some("GUILD_BAN_REMOVE"),
109 Self::ChannelCreate => Some("CHANNEL_CREATE"),
110 Self::ChannelDelete => Some("CHANNEL_DELETE"),
111 Self::ChannelPinsUpdate => Some("CHANNEL_PINS_UPDATE"),
112 Self::ChannelUpdate => Some("CHANNEL_UPDATE"),
113 Self::CommandPermissionsUpdate => Some("APPLICATION_COMMAND_PERMISSIONS_UPDATE"),
114 Self::EntitlementCreate => Some("ENTITLEMENT_CREATE"),
115 Self::EntitlementDelete => Some("ENTITLEMENT_DELETE"),
116 Self::EntitlementUpdate => Some("ENTITLEMENT_UPDATE"),
117 Self::GuildAuditLogEntryCreate => Some("GUILD_AUDIT_LOG_ENTRY_CREATE"),
118 Self::GuildCreate => Some("GUILD_CREATE"),
119 Self::GuildDelete => Some("GUILD_DELETE"),
120 Self::GuildEmojisUpdate => Some("GUILD_EMOJIS_UPDATE"),
121 Self::GuildIntegrationsUpdate => Some("GUILD_INTEGRATIONS_UPDATE"),
122 Self::GuildScheduledEventCreate => Some("GUILD_SCHEDULED_EVENT_CREATE"),
123 Self::GuildScheduledEventDelete => Some("GUILD_SCHEDULED_EVENT_DELETE"),
124 Self::GuildScheduledEventUpdate => Some("GUILD_SCHEDULED_EVENT_UPDATE"),
125 Self::GuildScheduledEventUserAdd => Some("GUILD_SCHEDULED_EVENT_USER_ADD"),
126 Self::GuildScheduledEventUserRemove => Some("GUILD_SCHEDULED_EVENT_USER_REMOVE"),
127 Self::GuildStickersUpdate => Some("GUILD_STICKERS_UPDATE"),
128 Self::GuildUpdate => Some("GUILD_UPDATE"),
129 Self::IntegrationCreate => Some("INTEGRATION_CREATE"),
130 Self::IntegrationDelete => Some("INTEGRATION_DELETE"),
131 Self::IntegrationUpdate => Some("INTEGRATION_UPDATE"),
132 Self::InteractionCreate => Some("INTERACTION_CREATE"),
133 Self::InviteCreate => Some("INVITE_CREATE"),
134 Self::InviteDelete => Some("INVITE_DELETE"),
135 Self::MemberAdd => Some("GUILD_MEMBER_ADD"),
136 Self::MemberChunk => Some("GUILD_MEMBERS_CHUNK"),
137 Self::MemberRemove => Some("GUILD_MEMBER_REMOVE"),
138 Self::MemberUpdate => Some("GUILD_MEMBER_UPDATE"),
139 Self::MessageCreate => Some("MESSAGE_CREATE"),
140 Self::MessageDelete => Some("MESSAGE_DELETE"),
141 Self::MessageDeleteBulk => Some("MESSAGE_DELETE_BULK"),
142 Self::MessageUpdate => Some("MESSAGE_UPDATE"),
143 Self::MessagePollVoteAdd => Some("MESSAGE_POLL_VOTE_ADD"),
144 Self::MessagePollVoteRemove => Some("MESSAGE_POLL_VOTE_REMOVE"),
145 Self::PresenceUpdate => Some("PRESENCE_UPDATE"),
146 Self::RateLimited => Some("RATE_LIMITED"),
147 Self::ReactionAdd => Some("MESSAGE_REACTION_ADD"),
148 Self::ReactionRemove => Some("MESSAGE_REACTION_REMOVE"),
149 Self::ReactionRemoveAll => Some("MESSAGE_REACTION_REMOVE_ALL"),
150 Self::ReactionRemoveEmoji => Some("MESSAGE_REACTION_REMOVE_EMOJI"),
151 Self::Ready => Some("READY"),
152 Self::Resumed => Some("RESUMED"),
153 Self::RoleCreate => Some("GUILD_ROLE_CREATE"),
154 Self::RoleDelete => Some("GUILD_ROLE_DELETE"),
155 Self::RoleUpdate => Some("GUILD_ROLE_UPDATE"),
156 Self::StageInstanceCreate => Some("STAGE_INSTANCE_CREATE"),
157 Self::StageInstanceDelete => Some("STAGE_INSTANCE_DELETE"),
158 Self::StageInstanceUpdate => Some("STAGE_INSTANCE_UPDATE"),
159 Self::SubscriptionCreate => Some("SUBSCRIPTION_CREATE"),
160 Self::SubscriptionDelete => Some("SUBSCRIPTION_DELETE"),
161 Self::SubscriptionUpdate => Some("SUBSCRIPTION_UPDATE"),
162 Self::ThreadCreate => Some("THREAD_CREATE"),
163 Self::ThreadDelete => Some("THREAD_DELETE"),
164 Self::ThreadListSync => Some("THREAD_LIST_SYNC"),
165 Self::ThreadMembersUpdate => Some("THREAD_MEMBERS_UPDATE"),
166 Self::ThreadMemberUpdate => Some("THREAD_MEMBER_UPDATE"),
167 Self::ThreadUpdate => Some("THREAD_UPDATE"),
168 Self::TypingStart => Some("TYPING_START"),
169 Self::UnavailableGuild => Some("UNAVAILABLE_GUILD"),
170 Self::UserUpdate => Some("USER_UPDATE"),
171 Self::VoiceServerUpdate => Some("VOICE_SERVER_UPDATE"),
172 Self::VoiceStateUpdate => Some("VOICE_STATE_UPDATE"),
173 Self::WebhooksUpdate => Some("WEBHOOKS_UPDATE"),
174 Self::GatewayClose
175 | Self::GatewayHeartbeat
176 | Self::GatewayHeartbeatAck
177 | Self::GatewayHello
178 | Self::GatewayInvalidateSession
179 | Self::GatewayReconnect => None,
180 }
181 }
182}
183
184impl<'a> TryFrom<&'a str> for EventType {
185 type Error = &'a str;
186
187 fn try_from(event_type: &'a str) -> Result<Self, Self::Error> {
188 match event_type {
189 "AUTO_MODERATION_ACTION_EXECUTION" => Ok(Self::AutoModerationActionExecution),
190 "AUTO_MODERATION_RULE_CREATE" => Ok(Self::AutoModerationRuleCreate),
191 "AUTO_MODERATION_RULE_DELETE" => Ok(Self::AutoModerationRuleDelete),
192 "AUTO_MODERATION_RULE_UPDATE" => Ok(Self::AutoModerationRuleUpdate),
193 "GUILD_AUDIT_LOG_ENTRY_CREATE" => Ok(Self::GuildAuditLogEntryCreate),
194 "GUILD_BAN_ADD" => Ok(Self::BanAdd),
195 "GUILD_BAN_REMOVE" => Ok(Self::BanRemove),
196 "CHANNEL_CREATE" => Ok(Self::ChannelCreate),
197 "CHANNEL_DELETE" => Ok(Self::ChannelDelete),
198 "CHANNEL_PINS_UPDATE" => Ok(Self::ChannelPinsUpdate),
199 "CHANNEL_UPDATE" => Ok(Self::ChannelUpdate),
200 "APPLICATION_COMMAND_PERMISSIONS_UPDATE" => Ok(Self::CommandPermissionsUpdate),
201 "ENTITLEMENT_CREATE" => Ok(Self::EntitlementCreate),
202 "GUILD_CREATE" => Ok(Self::GuildCreate),
203 "GUILD_DELETE" => Ok(Self::GuildDelete),
204 "GUILD_EMOJIS_UPDATE" => Ok(Self::GuildEmojisUpdate),
205 "GUILD_INTEGRATIONS_UPDATE" => Ok(Self::GuildIntegrationsUpdate),
206 "GUILD_SCHEDULED_EVENT_CREATE" => Ok(Self::GuildScheduledEventCreate),
207 "GUILD_SCHEDULED_EVENT_DELETE" => Ok(Self::GuildScheduledEventDelete),
208 "GUILD_SCHEDULED_EVENT_UPDATE" => Ok(Self::GuildScheduledEventUpdate),
209 "GUILD_SCHEDULED_EVENT_USER_ADD" => Ok(Self::GuildScheduledEventUserAdd),
210 "GUILD_SCHEDULED_EVENT_USER_REMOVE" => Ok(Self::GuildScheduledEventUserRemove),
211 "GUILD_UPDATE" => Ok(Self::GuildUpdate),
212 "INTEGRATION_CREATE" => Ok(Self::IntegrationCreate),
213 "INTEGRATION_DELETE" => Ok(Self::IntegrationDelete),
214 "INTEGRATION_UPDATE" => Ok(Self::IntegrationUpdate),
215 "INTERACTION_CREATE" => Ok(Self::InteractionCreate),
216 "INVITE_CREATE" => Ok(Self::InviteCreate),
217 "INVITE_DELETE" => Ok(Self::InviteDelete),
218 "GUILD_MEMBER_ADD" => Ok(Self::MemberAdd),
219 "GUILD_MEMBER_REMOVE" => Ok(Self::MemberRemove),
220 "GUILD_MEMBER_UPDATE" => Ok(Self::MemberUpdate),
221 "GUILD_MEMBERS_CHUNK" => Ok(Self::MemberChunk),
222 "MESSAGE_CREATE" => Ok(Self::MessageCreate),
223 "MESSAGE_DELETE" => Ok(Self::MessageDelete),
224 "MESSAGE_DELETE_BULK" => Ok(Self::MessageDeleteBulk),
225 "MESSAGE_UPDATE" => Ok(Self::MessageUpdate),
226 "MESSAGE_POLL_VOTE_ADD" => Ok(Self::MessagePollVoteAdd),
227 "MESSAGE_POLL_VOTE_REMOVE" => Ok(Self::MessagePollVoteRemove),
228 "PRESENCE_UPDATE" => Ok(Self::PresenceUpdate),
229 "MESSAGE_REACTION_ADD" => Ok(Self::ReactionAdd),
230 "MESSAGE_REACTION_REMOVE" => Ok(Self::ReactionRemove),
231 "MESSAGE_REACTION_REMOVE_ALL" => Ok(Self::ReactionRemoveAll),
232 "MESSAGE_REACTION_REMOVE_EMOJI" => Ok(Self::ReactionRemoveEmoji),
233 "RATE_LIMITED" => Ok(Self::RateLimited),
234 "READY" => Ok(Self::Ready),
235 "RESUMED" => Ok(Self::Resumed),
236 "GUILD_ROLE_CREATE" => Ok(Self::RoleCreate),
237 "GUILD_ROLE_DELETE" => Ok(Self::RoleDelete),
238 "GUILD_ROLE_UPDATE" => Ok(Self::RoleUpdate),
239 "STAGE_INSTANCE_CREATE" => Ok(Self::StageInstanceCreate),
240 "STAGE_INSTANCE_DELETE" => Ok(Self::StageInstanceDelete),
241 "STAGE_INSTANCE_UPDATE" => Ok(Self::StageInstanceUpdate),
242 "SUBSCRIPTION_CREATE" => Ok(Self::SubscriptionCreate),
243 "SUBSCRIPTION_DELETE" => Ok(Self::SubscriptionDelete),
244 "SUBSCRIPTION_UPDATE" => Ok(Self::SubscriptionUpdate),
245 "THREAD_CREATE" => Ok(Self::ThreadCreate),
246 "THREAD_DELETE" => Ok(Self::ThreadDelete),
247 "THREAD_LIST_SYNC" => Ok(Self::ThreadListSync),
248 "THREAD_MEMBER_UPDATE" => Ok(Self::ThreadMemberUpdate),
249 "THREAD_MEMBERS_UPDATE" => Ok(Self::ThreadMembersUpdate),
250 "THREAD_UPDATE" => Ok(Self::ThreadUpdate),
251 "TYPING_START" => Ok(Self::TypingStart),
252 "UNAVAILABLE_GUILD" => Ok(Self::UnavailableGuild),
253 "USER_UPDATE" => Ok(Self::UserUpdate),
254 "VOICE_SERVER_UPDATE" => Ok(Self::VoiceServerUpdate),
255 "VOICE_STATE_UPDATE" => Ok(Self::VoiceStateUpdate),
256 "WEBHOOKS_UPDATE" => Ok(Self::WebhooksUpdate),
257 _ => Err(event_type),
258 }
259 }
260}
261
262#[cfg(test)]
263mod tests {
264 use super::EventType;
265 use serde_test::Token;
266
267 fn assert_variant(kind: EventType, name: &'static str) {
268 serde_test::assert_tokens(
269 &kind,
270 &[Token::UnitVariant {
271 name: "EventType",
272 variant: name,
273 }],
274 );
275 }
276
277 #[allow(clippy::too_many_lines)]
278 #[test]
279 fn variants() {
280 assert_variant(
281 EventType::AutoModerationActionExecution,
282 "AUTO_MODERATION_ACTION_EXECUTION",
283 );
284 assert_variant(
285 EventType::AutoModerationRuleCreate,
286 "AUTO_MODERATION_RULE_CREATE",
287 );
288 assert_variant(
289 EventType::AutoModerationRuleDelete,
290 "AUTO_MODERATION_RULE_DELETE",
291 );
292 assert_variant(
293 EventType::AutoModerationRuleUpdate,
294 "AUTO_MODERATION_RULE_UPDATE",
295 );
296 assert_variant(EventType::BanAdd, "GUILD_BAN_ADD");
297 assert_variant(EventType::BanRemove, "GUILD_BAN_REMOVE");
298 assert_variant(EventType::ChannelCreate, "CHANNEL_CREATE");
299 assert_variant(EventType::ChannelDelete, "CHANNEL_DELETE");
300 assert_variant(EventType::ChannelPinsUpdate, "CHANNEL_PINS_UPDATE");
301 assert_variant(EventType::ChannelUpdate, "CHANNEL_UPDATE");
302 assert_variant(
303 EventType::CommandPermissionsUpdate,
304 "APPLICATION_COMMAND_PERMISSIONS_UPDATE",
305 );
306 assert_variant(EventType::GatewayClose, "GATEWAY_CLOSE");
307 assert_variant(EventType::GatewayHeartbeat, "GATEWAY_HEARTBEAT");
308 assert_variant(EventType::GatewayHeartbeatAck, "GATEWAY_HEARTBEAT_ACK");
309 assert_variant(EventType::GatewayHello, "GATEWAY_HELLO");
310 assert_variant(
311 EventType::GatewayInvalidateSession,
312 "GATEWAY_INVALIDATE_SESSION",
313 );
314 assert_variant(EventType::GatewayReconnect, "GATEWAY_RECONNECT");
315 assert_variant(
316 EventType::GuildAuditLogEntryCreate,
317 "GUILD_AUDIT_LOG_ENTRY_CREATE",
318 );
319 assert_variant(EventType::GuildCreate, "GUILD_CREATE");
320 assert_variant(EventType::GuildDelete, "GUILD_DELETE");
321 assert_variant(EventType::GuildEmojisUpdate, "GUILD_EMOJIS_UPDATE");
322 assert_variant(
323 EventType::GuildIntegrationsUpdate,
324 "GUILD_INTEGRATIONS_UPDATE",
325 );
326 assert_variant(
327 EventType::GuildScheduledEventCreate,
328 "GUILD_SCHEDULED_EVENT_CREATE",
329 );
330 assert_variant(
331 EventType::GuildScheduledEventDelete,
332 "GUILD_SCHEDULED_EVENT_DELETE",
333 );
334 assert_variant(
335 EventType::GuildScheduledEventUpdate,
336 "GUILD_SCHEDULED_EVENT_UPDATE",
337 );
338 assert_variant(
339 EventType::GuildScheduledEventUserAdd,
340 "GUILD_SCHEDULED_EVENT_USER_ADD",
341 );
342 assert_variant(
343 EventType::GuildScheduledEventUserRemove,
344 "GUILD_SCHEDULED_EVENT_USER_REMOVE",
345 );
346 assert_variant(EventType::GuildUpdate, "GUILD_UPDATE");
347 assert_variant(EventType::IntegrationCreate, "INTEGRATION_CREATE");
348 assert_variant(EventType::IntegrationDelete, "INTEGRATION_DELETE");
349 assert_variant(EventType::IntegrationUpdate, "INTEGRATION_UPDATE");
350 assert_variant(EventType::InteractionCreate, "INTERACTION_CREATE");
351 assert_variant(EventType::InviteCreate, "INVITE_CREATE");
352 assert_variant(EventType::InviteDelete, "INVITE_DELETE");
353 assert_variant(EventType::MemberAdd, "GUILD_MEMBER_ADD");
354 assert_variant(EventType::MemberChunk, "GUILD_MEMBERS_CHUNK");
355 assert_variant(EventType::MemberRemove, "GUILD_MEMBER_REMOVE");
356 assert_variant(EventType::MemberUpdate, "GUILD_MEMBER_UPDATE");
357 assert_variant(EventType::MessageCreate, "MESSAGE_CREATE");
358 assert_variant(EventType::MessageDelete, "MESSAGE_DELETE");
359 assert_variant(EventType::MessageDeleteBulk, "MESSAGE_DELETE_BULK");
360 assert_variant(EventType::MessageUpdate, "MESSAGE_UPDATE");
361 assert_variant(EventType::MessagePollVoteAdd, "MESSAGE_POLL_VOTE_ADD");
362 assert_variant(EventType::MessagePollVoteRemove, "MESSAGE_POLL_VOTE_REMOVE");
363 assert_variant(EventType::PresenceUpdate, "PRESENCE_UPDATE");
364 assert_variant(EventType::RateLimited, "RATE_LIMITED");
365 assert_variant(EventType::ReactionAdd, "MESSAGE_REACTION_ADD");
366 assert_variant(EventType::ReactionRemove, "MESSAGE_REACTION_REMOVE");
367 assert_variant(EventType::ReactionRemoveAll, "MESSAGE_REACTION_REMOVE_ALL");
368 assert_variant(
369 EventType::ReactionRemoveEmoji,
370 "MESSAGE_REACTION_REMOVE_EMOJI",
371 );
372 assert_variant(EventType::Ready, "READY");
373 assert_variant(EventType::Resumed, "RESUMED");
374 assert_variant(EventType::RoleCreate, "GUILD_ROLE_CREATE");
375 assert_variant(EventType::RoleDelete, "GUILD_ROLE_DELETE");
376 assert_variant(EventType::RoleUpdate, "GUILD_ROLE_UPDATE");
377 assert_variant(EventType::StageInstanceCreate, "STAGE_INSTANCE_CREATE");
378 assert_variant(EventType::StageInstanceDelete, "STAGE_INSTANCE_DELETE");
379 assert_variant(EventType::StageInstanceUpdate, "STAGE_INSTANCE_UPDATE");
380 assert_variant(EventType::SubscriptionCreate, "SUBSCRIPTION_CREATE");
381 assert_variant(EventType::SubscriptionDelete, "SUBSCRIPTION_DELETE");
382 assert_variant(EventType::SubscriptionUpdate, "SUBSCRIPTION_UPDATE");
383 assert_variant(EventType::ThreadCreate, "THREAD_CREATE");
384 assert_variant(EventType::ThreadDelete, "THREAD_DELETE");
385 assert_variant(EventType::ThreadListSync, "THREAD_LIST_SYNC");
386 assert_variant(EventType::ThreadMemberUpdate, "THREAD_MEMBER_UPDATE");
387 assert_variant(EventType::ThreadMembersUpdate, "THREAD_MEMBERS_UPDATE");
388 assert_variant(EventType::ThreadUpdate, "THREAD_UPDATE");
389 assert_variant(EventType::TypingStart, "TYPING_START");
390 assert_variant(EventType::UnavailableGuild, "UNAVAILABLE_GUILD");
391 assert_variant(EventType::UserUpdate, "USER_UPDATE");
392 assert_variant(EventType::VoiceServerUpdate, "VOICE_SERVER_UPDATE");
393 assert_variant(EventType::VoiceStateUpdate, "VOICE_STATE_UPDATE");
394 assert_variant(EventType::WebhooksUpdate, "WEBHOOKS_UPDATE");
395 assert_variant(EventType::EntitlementCreate, "ENTITLEMENT_CREATE");
396 }
397}