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::{BulkGuildBan, 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 BulkGuildBan<'_> {}
60 impl Sealed for CreateAutoModerationRule<'_> {}
61 impl Sealed for CreateBan<'_> {}
62 impl Sealed for CreateEmoji<'_> {}
63 impl Sealed for CreateForumThreadMessage<'_> {}
64 impl Sealed for CreateForumThread<'_> {}
65 impl Sealed for CreateGuildChannel<'_> {}
66 impl Sealed for CreateGuildExternalScheduledEvent<'_> {}
67 impl Sealed for CreateGuildPrune<'_> {}
68 impl Sealed for CreateGuildScheduledEvent<'_> {}
69 impl Sealed for CreateGuildStageInstanceScheduledEvent<'_> {}
70 impl Sealed for CreateGuildSticker<'_> {}
71 impl Sealed for CreateGuildVoiceScheduledEvent<'_> {}
72 impl Sealed for CreateInvite<'_> {}
73 impl Sealed for CreatePin<'_> {}
74 impl Sealed for CreateRole<'_> {}
75 impl Sealed for CreateStageInstance<'_> {}
76 impl Sealed for CreateThread<'_> {}
77 impl Sealed for CreateThreadFromMessage<'_> {}
78 impl Sealed for CreateWebhook<'_> {}
79 impl Sealed for DeleteAutoModerationRule<'_> {}
80 impl Sealed for DeleteBan<'_> {}
81 impl Sealed for DeleteChannel<'_> {}
82 impl Sealed for DeleteChannelPermissionConfigured<'_> {}
83 impl Sealed for DeleteEmoji<'_> {}
84 impl Sealed for DeleteGuildIntegration<'_> {}
85 impl Sealed for DeleteGuildSticker<'_> {}
86 impl Sealed for DeleteInvite<'_> {}
87 impl Sealed for DeleteMessage<'_> {}
88 impl Sealed for DeleteMessages<'_> {}
89 impl Sealed for DeletePin<'_> {}
90 impl Sealed for DeleteRole<'_> {}
91 impl Sealed for DeleteStageInstance<'_> {}
92 impl Sealed for DeleteWebhook<'_> {}
93 impl Sealed for DeleteWebhookMessage<'_> {}
94 impl Sealed for FollowNewsChannel<'_> {}
95 impl Sealed for RemoveMember<'_> {}
96 impl Sealed for RemoveRoleFromMember<'_> {}
97 impl Sealed for UpdateAutoModerationRule<'_> {}
98 impl Sealed for UpdateChannel<'_> {}
99 impl Sealed for UpdateChannelPermission<'_> {}
100 impl Sealed for UpdateCurrentMember<'_> {}
101 impl Sealed for UpdateCurrentUser<'_> {}
102 impl Sealed for UpdateEmoji<'_> {}
103 impl Sealed for UpdateGuild<'_> {}
104 impl Sealed for UpdateGuildMember<'_> {}
105 impl Sealed for UpdateGuildMfa<'_> {}
106 impl Sealed for UpdateGuildOnboarding<'_> {}
107 impl Sealed for UpdateGuildScheduledEvent<'_> {}
108 impl Sealed for UpdateGuildSticker<'_> {}
109 impl Sealed for UpdateGuildWelcomeScreen<'_> {}
110 impl Sealed for UpdateGuildWidgetSettings<'_> {}
111 impl Sealed for UpdateRole<'_> {}
112 impl Sealed for UpdateRolePositions<'_> {}
113 impl Sealed for UpdateStageInstance<'_> {}
114 impl Sealed for UpdateThread<'_> {}
115 impl Sealed for UpdateWebhook<'_> {}
116}
117
118#[cfg(test)]
119mod tests {
120 use super::AuditLogReason;
121 use crate::request::{
122 channel::{
123 CreatePin, DeleteChannel, DeleteChannelPermissionConfigured, DeletePin,
124 FollowNewsChannel, UpdateChannel, UpdateChannelPermission,
125 invite::{CreateInvite, DeleteInvite},
126 message::{DeleteMessage, DeleteMessages},
127 stage::{CreateStageInstance, DeleteStageInstance, UpdateStageInstance},
128 thread::{
129 CreateForumThread, CreateThread, CreateThreadFromMessage,
130 create_forum_thread::CreateForumThreadMessage,
131 },
132 webhook::{CreateWebhook, DeleteWebhook, UpdateWebhook},
133 },
134 guild::{
135 CreateGuildChannel, CreateGuildPrune, UpdateCurrentMember, UpdateGuild,
136 UpdateGuildWelcomeScreen,
137 ban::{BulkGuildBan, CreateBan, DeleteBan},
138 emoji::{CreateEmoji, DeleteEmoji, UpdateEmoji},
139 integration::DeleteGuildIntegration,
140 member::{AddRoleToMember, RemoveMember, RemoveRoleFromMember, UpdateGuildMember},
141 role::{CreateRole, DeleteRole, UpdateRole, UpdateRolePositions},
142 sticker::{CreateGuildSticker, DeleteGuildSticker, UpdateGuildSticker},
143 },
144 user::UpdateCurrentUser,
145 };
146 use static_assertions::{assert_impl_all, assert_obj_safe};
147
148 assert_obj_safe!(AuditLogReason<'_>);
149
150 assert_impl_all!(AddRoleToMember<'_>: AuditLogReason<'static>);
151 assert_impl_all!(BulkGuildBan<'_>: AuditLogReason<'static>);
152 assert_impl_all!(CreateBan<'_>: AuditLogReason<'static>);
153 assert_impl_all!(CreateEmoji<'_>: AuditLogReason<'static>);
154 assert_impl_all!(CreateForumThread<'_>: AuditLogReason<'static>);
155 assert_impl_all!(CreateForumThreadMessage<'_>: AuditLogReason<'static>);
156 assert_impl_all!(CreateGuildChannel<'_>: AuditLogReason<'static>);
157 assert_impl_all!(CreateGuildPrune<'_>: AuditLogReason<'static>);
158 assert_impl_all!(CreateGuildSticker<'_>: AuditLogReason<'static>);
159 assert_impl_all!(CreateInvite<'_>: AuditLogReason<'static>);
160 assert_impl_all!(CreatePin<'_>: AuditLogReason<'static>);
161 assert_impl_all!(CreateRole<'_>: AuditLogReason<'static>);
162 assert_impl_all!(CreateStageInstance<'_>: AuditLogReason<'static>);
163 assert_impl_all!(CreateThread<'_>: AuditLogReason<'static>);
164 assert_impl_all!(CreateThreadFromMessage<'_>: AuditLogReason<'static>);
165 assert_impl_all!(CreateWebhook<'_>: AuditLogReason<'static>);
166 assert_impl_all!(DeleteBan<'_>: AuditLogReason<'static>);
167 assert_impl_all!(DeleteChannel<'_>: AuditLogReason<'static>);
168 assert_impl_all!(DeleteChannelPermissionConfigured<'_>: AuditLogReason<'static>);
169 assert_impl_all!(DeleteEmoji<'_>: AuditLogReason<'static>);
170 assert_impl_all!(DeleteGuildIntegration<'_>: AuditLogReason<'static>);
171 assert_impl_all!(DeleteGuildSticker<'_>: AuditLogReason<'static>);
172 assert_impl_all!(DeleteInvite<'_>: AuditLogReason<'static>);
173 assert_impl_all!(DeleteMessage<'_>: AuditLogReason<'static>);
174 assert_impl_all!(DeleteMessages<'_>: AuditLogReason<'static>);
175 assert_impl_all!(DeletePin<'_>: AuditLogReason<'static>);
176 assert_impl_all!(DeleteRole<'_>: AuditLogReason<'static>);
177 assert_impl_all!(DeleteStageInstance<'_>: AuditLogReason<'static>);
178 assert_impl_all!(DeleteWebhook<'_>: AuditLogReason<'static>);
179 assert_impl_all!(FollowNewsChannel<'_>: AuditLogReason<'static>);
180 assert_impl_all!(RemoveMember<'_>: AuditLogReason<'static>);
181 assert_impl_all!(RemoveRoleFromMember<'_>: AuditLogReason<'static>);
182 assert_impl_all!(UpdateChannel<'_>: AuditLogReason<'static>);
183 assert_impl_all!(UpdateChannelPermission<'_>: AuditLogReason<'static>);
184 assert_impl_all!(UpdateCurrentMember<'_>: AuditLogReason<'static>);
185 assert_impl_all!(UpdateCurrentUser<'_>: AuditLogReason<'static>);
186 assert_impl_all!(UpdateEmoji<'_>: AuditLogReason<'static>);
187 assert_impl_all!(UpdateGuild<'_>: AuditLogReason<'static>);
188 assert_impl_all!(UpdateGuildMember<'_>: AuditLogReason<'static>);
189 assert_impl_all!(UpdateGuildSticker<'_>: AuditLogReason<'static>);
190 assert_impl_all!(UpdateGuildWelcomeScreen<'_>: AuditLogReason<'static>);
191 assert_impl_all!(UpdateRole<'_>: AuditLogReason<'static>);
192 assert_impl_all!(UpdateRolePositions<'_>: AuditLogReason<'static>);
193 assert_impl_all!(UpdateStageInstance<'_>: AuditLogReason<'static>);
194 assert_impl_all!(UpdateWebhook<'_>: AuditLogReason<'static>);
195}