twilight_http/request/scheduled_event/create_guild_scheduled_event/
external.rs1use super::{
2 super::EntityMetadataFields, CreateGuildScheduledEvent, CreateGuildScheduledEventFields,
3};
4#[cfg(not(target_os = "wasi"))]
5use crate::response::{Response, ResponseFuture};
6use crate::{
7 error::Error,
8 request::{AuditLogReason, Request, TryIntoRequest},
9};
10use std::future::IntoFuture;
11use twilight_model::{
12 guild::scheduled_event::{EntityType, GuildScheduledEvent},
13 util::Timestamp,
14};
15use twilight_validate::request::{
16 audit_reason as validate_audit_reason,
17 scheduled_event_description as validate_scheduled_event_description,
18};
19
20#[must_use = "requests must be configured and executed"]
22pub struct CreateGuildExternalScheduledEvent<'a>(CreateGuildScheduledEvent<'a>);
23
24#[allow(clippy::needless_pass_by_value)]
25impl<'a> CreateGuildExternalScheduledEvent<'a> {
26 pub(crate) fn new(
27 mut inner: CreateGuildScheduledEvent<'a>,
28 name: &'a str,
29 location: &'a str,
30 scheduled_start_time: &'a Timestamp,
31 scheduled_end_time: &'a Timestamp,
32 ) -> Self {
33 inner.fields = inner.fields.map(|fields| CreateGuildScheduledEventFields {
34 entity_type: Some(EntityType::External),
35 entity_metadata: Some(EntityMetadataFields {
36 location: Some(location),
37 }),
38 name: Some(name),
39 scheduled_end_time: Some(scheduled_end_time),
40 scheduled_start_time: Some(scheduled_start_time),
41 ..fields
42 });
43
44 Self(inner)
45 }
46
47 pub fn description(mut self, description: &'a str) -> Self {
58 self.0.fields = self.0.fields.and_then(|mut fields| {
59 validate_scheduled_event_description(description)?;
60 fields.description.replace(description);
61
62 Ok(fields)
63 });
64
65 self
66 }
67
68 pub fn image(mut self, image: &'a str) -> Self {
76 self.0.fields = self.0.fields.map(|mut fields| {
77 fields.image = Some(image);
78
79 fields
80 });
81
82 self
83 }
84}
85
86impl<'a> AuditLogReason<'a> for CreateGuildExternalScheduledEvent<'a> {
87 fn reason(mut self, reason: &'a str) -> Self {
88 self.0.reason = validate_audit_reason(reason).and(Ok(Some(reason)));
89
90 self
91 }
92}
93
94#[cfg(not(target_os = "wasi"))]
95impl IntoFuture for CreateGuildExternalScheduledEvent<'_> {
96 type Output = Result<Response<GuildScheduledEvent>, Error>;
97
98 type IntoFuture = ResponseFuture<GuildScheduledEvent>;
99
100 fn into_future(self) -> Self::IntoFuture {
101 self.0.exec()
102 }
103}
104
105impl TryIntoRequest for CreateGuildExternalScheduledEvent<'_> {
106 fn try_into_request(self) -> Result<Request, Error> {
107 self.0.try_into_request()
108 }
109}