twilight_http/request/
audit_reason.rs

1/// Attach a reason for a request.
2///
3/// Reasons are associated with the audit log entries that are automatically
4/// created for certain requests.
5pub trait AuditLogReason<'a>: private::Sealed {
6    /// Attach an audit log reason to the request.
7    ///
8    /// # Errors
9    ///
10    /// Returns an error of type [`AuditReason`] if the length is invalid.
11    ///
12    /// [`AuditReason`]: twilight_validate::request::ValidationErrorType::AuditReason
13    #[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    /// Sealed stops crates other crates implementing the trait.
52    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}