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 invite::{CreateInvite, DeleteInvite},
23 message::{DeleteMessage, DeleteMessages},
24 thread::UpdateThread,
25 webhook::{CreateWebhook, DeleteWebhook, DeleteWebhookMessage, UpdateWebhook},
26 CreatePin, DeleteChannel, DeleteChannelPermissionConfigured, DeletePin, UpdateChannel,
27 UpdateChannelPermission,
28 },
29 guild::{
30 auto_moderation::{
31 CreateAutoModerationRule, DeleteAutoModerationRule, UpdateAutoModerationRule,
32 },
33 ban::{CreateBan, DeleteBan},
34 emoji::{CreateEmoji, DeleteEmoji, UpdateEmoji},
35 integration::DeleteGuildIntegration,
36 member::{AddRoleToMember, RemoveMember, RemoveRoleFromMember, UpdateGuildMember},
37 role::{CreateRole, DeleteRole, UpdateRole, UpdateRolePositions},
38 sticker::{CreateGuildSticker, UpdateGuildSticker},
39 update_guild_onboarding::UpdateGuildOnboarding,
40 CreateGuildChannel, CreateGuildPrune, UpdateCurrentMember, UpdateGuild, UpdateGuildMfa,
41 UpdateGuildWidgetSettings,
42 },
43 scheduled_event::{
44 CreateGuildExternalScheduledEvent, CreateGuildScheduledEvent,
45 CreateGuildStageInstanceScheduledEvent, CreateGuildVoiceScheduledEvent,
46 UpdateGuildScheduledEvent,
47 },
48 user::UpdateCurrentUser,
49 };
50
51 pub trait Sealed {}
53
54 impl Sealed for AddRoleToMember<'_> {}
55 impl Sealed for CreateAutoModerationRule<'_> {}
56 impl Sealed for CreateBan<'_> {}
57 impl Sealed for CreateEmoji<'_> {}
58 impl Sealed for CreateGuildChannel<'_> {}
59 impl Sealed for CreateGuildExternalScheduledEvent<'_> {}
60 impl Sealed for CreateGuildPrune<'_> {}
61 impl Sealed for CreateGuildScheduledEvent<'_> {}
62 impl Sealed for CreateGuildStageInstanceScheduledEvent<'_> {}
63 impl Sealed for CreateGuildSticker<'_> {}
64 impl Sealed for CreateGuildVoiceScheduledEvent<'_> {}
65 impl Sealed for CreateInvite<'_> {}
66 impl Sealed for CreatePin<'_> {}
67 impl Sealed for CreateRole<'_> {}
68 impl Sealed for CreateWebhook<'_> {}
69 impl Sealed for DeleteAutoModerationRule<'_> {}
70 impl Sealed for DeleteBan<'_> {}
71 impl Sealed for DeleteChannel<'_> {}
72 impl Sealed for DeleteChannelPermissionConfigured<'_> {}
73 impl Sealed for DeleteEmoji<'_> {}
74 impl Sealed for DeleteGuildIntegration<'_> {}
75 impl Sealed for DeleteInvite<'_> {}
76 impl Sealed for DeleteMessage<'_> {}
77 impl Sealed for DeleteMessages<'_> {}
78 impl Sealed for DeletePin<'_> {}
79 impl Sealed for DeleteRole<'_> {}
80 impl Sealed for DeleteWebhook<'_> {}
81 impl Sealed for DeleteWebhookMessage<'_> {}
82 impl Sealed for RemoveMember<'_> {}
83 impl Sealed for RemoveRoleFromMember<'_> {}
84 impl Sealed for UpdateAutoModerationRule<'_> {}
85 impl Sealed for UpdateChannel<'_> {}
86 impl Sealed for UpdateChannelPermission<'_> {}
87 impl Sealed for UpdateCurrentMember<'_> {}
88 impl Sealed for UpdateCurrentUser<'_> {}
89 impl Sealed for UpdateEmoji<'_> {}
90 impl Sealed for UpdateGuild<'_> {}
91 impl Sealed for UpdateGuildMember<'_> {}
92 impl Sealed for UpdateGuildMfa<'_> {}
93 impl Sealed for UpdateGuildOnboarding<'_> {}
94 impl Sealed for UpdateGuildScheduledEvent<'_> {}
95 impl Sealed for UpdateGuildSticker<'_> {}
96 impl Sealed for UpdateGuildWidgetSettings<'_> {}
97 impl Sealed for UpdateRole<'_> {}
98 impl Sealed for UpdateRolePositions<'_> {}
99 impl Sealed for UpdateThread<'_> {}
100 impl Sealed for UpdateWebhook<'_> {}
101}
102
103#[cfg(test)]
104mod tests {
105 use super::AuditLogReason;
106 use crate::request::{
107 channel::{
108 invite::{CreateInvite, DeleteInvite},
109 message::{DeleteMessage, DeleteMessages},
110 webhook::{CreateWebhook, DeleteWebhook, UpdateWebhook},
111 CreatePin, DeleteChannel, DeleteChannelPermissionConfigured, DeletePin, UpdateChannel,
112 UpdateChannelPermission,
113 },
114 guild::{
115 ban::{CreateBan, DeleteBan},
116 emoji::{CreateEmoji, DeleteEmoji, UpdateEmoji},
117 integration::DeleteGuildIntegration,
118 member::{AddRoleToMember, RemoveMember, RemoveRoleFromMember, UpdateGuildMember},
119 role::{CreateRole, DeleteRole, UpdateRole, UpdateRolePositions},
120 sticker::{CreateGuildSticker, UpdateGuildSticker},
121 CreateGuildChannel, CreateGuildPrune, UpdateCurrentMember, UpdateGuild,
122 },
123 user::UpdateCurrentUser,
124 };
125 use static_assertions::{assert_impl_all, assert_obj_safe};
126
127 assert_obj_safe!(AuditLogReason<'_>);
128
129 assert_impl_all!(AddRoleToMember<'_>: AuditLogReason<'static>);
130 assert_impl_all!(CreateBan<'_>: AuditLogReason<'static>);
131 assert_impl_all!(CreateEmoji<'_>: AuditLogReason<'static>);
132 assert_impl_all!(CreateGuildChannel<'_>: AuditLogReason<'static>);
133 assert_impl_all!(CreateGuildPrune<'_>: AuditLogReason<'static>);
134 assert_impl_all!(CreateGuildSticker<'_>: AuditLogReason<'static>);
135 assert_impl_all!(CreateInvite<'_>: AuditLogReason<'static>);
136 assert_impl_all!(CreatePin<'_>: AuditLogReason<'static>);
137 assert_impl_all!(CreateRole<'_>: AuditLogReason<'static>);
138 assert_impl_all!(CreateWebhook<'_>: AuditLogReason<'static>);
139 assert_impl_all!(DeleteBan<'_>: AuditLogReason<'static>);
140 assert_impl_all!(DeleteChannel<'_>: AuditLogReason<'static>);
141 assert_impl_all!(DeleteChannelPermissionConfigured<'_>: AuditLogReason<'static>);
142 assert_impl_all!(DeleteEmoji<'_>: AuditLogReason<'static>);
143 assert_impl_all!(DeleteGuildIntegration<'_>: AuditLogReason<'static>);
144 assert_impl_all!(DeleteInvite<'_>: AuditLogReason<'static>);
145 assert_impl_all!(DeleteMessage<'_>: AuditLogReason<'static>);
146 assert_impl_all!(DeleteMessages<'_>: AuditLogReason<'static>);
147 assert_impl_all!(DeletePin<'_>: AuditLogReason<'static>);
148 assert_impl_all!(DeleteRole<'_>: AuditLogReason<'static>);
149 assert_impl_all!(DeleteWebhook<'_>: AuditLogReason<'static>);
150 assert_impl_all!(RemoveMember<'_>: AuditLogReason<'static>);
151 assert_impl_all!(RemoveRoleFromMember<'_>: AuditLogReason<'static>);
152 assert_impl_all!(UpdateChannel<'_>: AuditLogReason<'static>);
153 assert_impl_all!(UpdateChannelPermission<'_>: AuditLogReason<'static>);
154 assert_impl_all!(UpdateCurrentMember<'_>: AuditLogReason<'static>);
155 assert_impl_all!(UpdateCurrentUser<'_>: AuditLogReason<'static>);
156 assert_impl_all!(UpdateEmoji<'_>: AuditLogReason<'static>);
157 assert_impl_all!(UpdateGuild<'_>: AuditLogReason<'static>);
158 assert_impl_all!(UpdateGuildMember<'_>: AuditLogReason<'static>);
159 assert_impl_all!(UpdateGuildSticker<'_>: AuditLogReason<'static>);
160 assert_impl_all!(UpdateRole<'_>: AuditLogReason<'static>);
161 assert_impl_all!(UpdateRolePositions<'_>: AuditLogReason<'static>);
162 assert_impl_all!(UpdateWebhook<'_>: AuditLogReason<'static>);
163}