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