1pub trait AuditLogReason<'a>: private::Sealed {
6 #[must_use]
14 fn reason(self, reason: &'a str) -> Self
15 where
16 Self: Sized;
17}
18
19mod private {
20 use crate::request::{
21 channel::{
22 CreatePin, DeleteChannel, DeleteChannelPermissionConfigured, DeletePin,
23 FollowNewsChannel, UpdateChannel, UpdateChannelPermission,
24 invite::{CreateInvite, DeleteInvite},
25 message::{DeleteMessage, DeleteMessages},
26 stage::{CreateStageInstance, DeleteStageInstance, UpdateStageInstance},
27 thread::{
28 CreateForumThread, CreateThread, CreateThreadFromMessage, UpdateThread,
29 create_forum_thread::CreateForumThreadMessage,
30 },
31 webhook::{CreateWebhook, DeleteWebhook, DeleteWebhookMessage, UpdateWebhook},
32 },
33 guild::{
34 CreateGuildChannel, CreateGuildPrune, UpdateCurrentMember, UpdateGuild, UpdateGuildMfa,
35 UpdateGuildWelcomeScreen, UpdateGuildWidgetSettings,
36 auto_moderation::{
37 CreateAutoModerationRule, DeleteAutoModerationRule, UpdateAutoModerationRule,
38 },
39 ban::{CreateBan, DeleteBan},
40 emoji::{CreateEmoji, DeleteEmoji, UpdateEmoji},
41 integration::DeleteGuildIntegration,
42 member::{AddRoleToMember, RemoveMember, RemoveRoleFromMember, UpdateGuildMember},
43 role::{CreateRole, DeleteRole, UpdateRole, UpdateRolePositions},
44 sticker::{CreateGuildSticker, DeleteGuildSticker, UpdateGuildSticker},
45 update_guild_onboarding::UpdateGuildOnboarding,
46 },
47 scheduled_event::{
48 CreateGuildExternalScheduledEvent, CreateGuildScheduledEvent,
49 CreateGuildStageInstanceScheduledEvent, CreateGuildVoiceScheduledEvent,
50 UpdateGuildScheduledEvent,
51 },
52 user::UpdateCurrentUser,
53 };
54
55 pub trait Sealed {}
57
58 impl Sealed for AddRoleToMember<'_> {}
59 impl Sealed for CreateAutoModerationRule<'_> {}
60 impl Sealed for CreateBan<'_> {}
61 impl Sealed for CreateEmoji<'_> {}
62 impl Sealed for CreateForumThreadMessage<'_> {}
63 impl Sealed for CreateForumThread<'_> {}
64 impl Sealed for CreateGuildChannel<'_> {}
65 impl Sealed for CreateGuildExternalScheduledEvent<'_> {}
66 impl Sealed for CreateGuildPrune<'_> {}
67 impl Sealed for CreateGuildScheduledEvent<'_> {}
68 impl Sealed for CreateGuildStageInstanceScheduledEvent<'_> {}
69 impl Sealed for CreateGuildSticker<'_> {}
70 impl Sealed for CreateGuildVoiceScheduledEvent<'_> {}
71 impl Sealed for CreateInvite<'_> {}
72 impl Sealed for CreatePin<'_> {}
73 impl Sealed for CreateRole<'_> {}
74 impl Sealed for CreateStageInstance<'_> {}
75 impl Sealed for CreateThread<'_> {}
76 impl Sealed for CreateThreadFromMessage<'_> {}
77 impl Sealed for CreateWebhook<'_> {}
78 impl Sealed for DeleteAutoModerationRule<'_> {}
79 impl Sealed for DeleteBan<'_> {}
80 impl Sealed for DeleteChannel<'_> {}
81 impl Sealed for DeleteChannelPermissionConfigured<'_> {}
82 impl Sealed for DeleteEmoji<'_> {}
83 impl Sealed for DeleteGuildIntegration<'_> {}
84 impl Sealed for DeleteGuildSticker<'_> {}
85 impl Sealed for DeleteInvite<'_> {}
86 impl Sealed for DeleteMessage<'_> {}
87 impl Sealed for DeleteMessages<'_> {}
88 impl Sealed for DeletePin<'_> {}
89 impl Sealed for DeleteRole<'_> {}
90 impl Sealed for DeleteStageInstance<'_> {}
91 impl Sealed for DeleteWebhook<'_> {}
92 impl Sealed for DeleteWebhookMessage<'_> {}
93 impl Sealed for FollowNewsChannel<'_> {}
94 impl Sealed for RemoveMember<'_> {}
95 impl Sealed for RemoveRoleFromMember<'_> {}
96 impl Sealed for UpdateAutoModerationRule<'_> {}
97 impl Sealed for UpdateChannel<'_> {}
98 impl Sealed for UpdateChannelPermission<'_> {}
99 impl Sealed for UpdateCurrentMember<'_> {}
100 impl Sealed for UpdateCurrentUser<'_> {}
101 impl Sealed for UpdateEmoji<'_> {}
102 impl Sealed for UpdateGuild<'_> {}
103 impl Sealed for UpdateGuildMember<'_> {}
104 impl Sealed for UpdateGuildMfa<'_> {}
105 impl Sealed for UpdateGuildOnboarding<'_> {}
106 impl Sealed for UpdateGuildScheduledEvent<'_> {}
107 impl Sealed for UpdateGuildSticker<'_> {}
108 impl Sealed for UpdateGuildWelcomeScreen<'_> {}
109 impl Sealed for UpdateGuildWidgetSettings<'_> {}
110 impl Sealed for UpdateRole<'_> {}
111 impl Sealed for UpdateRolePositions<'_> {}
112 impl Sealed for UpdateStageInstance<'_> {}
113 impl Sealed for UpdateThread<'_> {}
114 impl Sealed for UpdateWebhook<'_> {}
115}
116
117#[cfg(test)]
118mod tests {
119 use super::AuditLogReason;
120 use crate::request::{
121 channel::{
122 CreatePin, DeleteChannel, DeleteChannelPermissionConfigured, DeletePin,
123 FollowNewsChannel, UpdateChannel, UpdateChannelPermission,
124 invite::{CreateInvite, DeleteInvite},
125 message::{DeleteMessage, DeleteMessages},
126 stage::{CreateStageInstance, DeleteStageInstance, UpdateStageInstance},
127 thread::{
128 CreateForumThread, CreateThread, CreateThreadFromMessage,
129 create_forum_thread::CreateForumThreadMessage,
130 },
131 webhook::{CreateWebhook, DeleteWebhook, UpdateWebhook},
132 },
133 guild::{
134 CreateGuildChannel, CreateGuildPrune, UpdateCurrentMember, UpdateGuild,
135 UpdateGuildWelcomeScreen,
136 ban::{CreateBan, DeleteBan},
137 emoji::{CreateEmoji, DeleteEmoji, UpdateEmoji},
138 integration::DeleteGuildIntegration,
139 member::{AddRoleToMember, RemoveMember, RemoveRoleFromMember, UpdateGuildMember},
140 role::{CreateRole, DeleteRole, UpdateRole, UpdateRolePositions},
141 sticker::{CreateGuildSticker, DeleteGuildSticker, UpdateGuildSticker},
142 },
143 user::UpdateCurrentUser,
144 };
145 use static_assertions::{assert_impl_all, assert_obj_safe};
146
147 assert_obj_safe!(AuditLogReason<'_>);
148
149 assert_impl_all!(AddRoleToMember<'_>: AuditLogReason<'static>);
150 assert_impl_all!(CreateBan<'_>: AuditLogReason<'static>);
151 assert_impl_all!(CreateEmoji<'_>: AuditLogReason<'static>);
152 assert_impl_all!(CreateForumThread<'_>: AuditLogReason<'static>);
153 assert_impl_all!(CreateForumThreadMessage<'_>: AuditLogReason<'static>);
154 assert_impl_all!(CreateGuildChannel<'_>: AuditLogReason<'static>);
155 assert_impl_all!(CreateGuildPrune<'_>: AuditLogReason<'static>);
156 assert_impl_all!(CreateGuildSticker<'_>: AuditLogReason<'static>);
157 assert_impl_all!(CreateInvite<'_>: AuditLogReason<'static>);
158 assert_impl_all!(CreatePin<'_>: AuditLogReason<'static>);
159 assert_impl_all!(CreateRole<'_>: AuditLogReason<'static>);
160 assert_impl_all!(CreateStageInstance<'_>: AuditLogReason<'static>);
161 assert_impl_all!(CreateThread<'_>: AuditLogReason<'static>);
162 assert_impl_all!(CreateThreadFromMessage<'_>: AuditLogReason<'static>);
163 assert_impl_all!(CreateWebhook<'_>: AuditLogReason<'static>);
164 assert_impl_all!(DeleteBan<'_>: AuditLogReason<'static>);
165 assert_impl_all!(DeleteChannel<'_>: AuditLogReason<'static>);
166 assert_impl_all!(DeleteChannelPermissionConfigured<'_>: AuditLogReason<'static>);
167 assert_impl_all!(DeleteEmoji<'_>: AuditLogReason<'static>);
168 assert_impl_all!(DeleteGuildIntegration<'_>: AuditLogReason<'static>);
169 assert_impl_all!(DeleteGuildSticker<'_>: AuditLogReason<'static>);
170 assert_impl_all!(DeleteInvite<'_>: AuditLogReason<'static>);
171 assert_impl_all!(DeleteMessage<'_>: AuditLogReason<'static>);
172 assert_impl_all!(DeleteMessages<'_>: AuditLogReason<'static>);
173 assert_impl_all!(DeletePin<'_>: AuditLogReason<'static>);
174 assert_impl_all!(DeleteRole<'_>: AuditLogReason<'static>);
175 assert_impl_all!(DeleteStageInstance<'_>: AuditLogReason<'static>);
176 assert_impl_all!(DeleteWebhook<'_>: AuditLogReason<'static>);
177 assert_impl_all!(FollowNewsChannel<'_>: AuditLogReason<'static>);
178 assert_impl_all!(RemoveMember<'_>: AuditLogReason<'static>);
179 assert_impl_all!(RemoveRoleFromMember<'_>: AuditLogReason<'static>);
180 assert_impl_all!(UpdateChannel<'_>: AuditLogReason<'static>);
181 assert_impl_all!(UpdateChannelPermission<'_>: AuditLogReason<'static>);
182 assert_impl_all!(UpdateCurrentMember<'_>: AuditLogReason<'static>);
183 assert_impl_all!(UpdateCurrentUser<'_>: AuditLogReason<'static>);
184 assert_impl_all!(UpdateEmoji<'_>: AuditLogReason<'static>);
185 assert_impl_all!(UpdateGuild<'_>: AuditLogReason<'static>);
186 assert_impl_all!(UpdateGuildMember<'_>: AuditLogReason<'static>);
187 assert_impl_all!(UpdateGuildSticker<'_>: AuditLogReason<'static>);
188 assert_impl_all!(UpdateGuildWelcomeScreen<'_>: AuditLogReason<'static>);
189 assert_impl_all!(UpdateRole<'_>: AuditLogReason<'static>);
190 assert_impl_all!(UpdateRolePositions<'_>: AuditLogReason<'static>);
191 assert_impl_all!(UpdateStageInstance<'_>: AuditLogReason<'static>);
192 assert_impl_all!(UpdateWebhook<'_>: AuditLogReason<'static>);
193}