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, recurrence_rule::RecurrenceRule},
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 pub fn recurrence_rule(mut self, recurrence_rule: &'a RecurrenceRule) -> Self {
88 self.0.fields = self.0.fields.map(|mut fields| {
89 fields.recurrence_rule = Some(recurrence_rule);
90
91 fields
92 });
93
94 self
95 }
96}
97
98impl<'a> AuditLogReason<'a> for CreateGuildExternalScheduledEvent<'a> {
99 fn reason(mut self, reason: &'a str) -> Self {
100 self.0.reason = validate_audit_reason(reason).and(Ok(Some(reason)));
101
102 self
103 }
104}
105
106impl IntoFuture for CreateGuildExternalScheduledEvent<'_> {
107 type Output = Result<Response<GuildScheduledEvent>, Error>;
108
109 type IntoFuture = ResponseFuture<GuildScheduledEvent>;
110
111 fn into_future(self) -> Self::IntoFuture {
112 self.0.exec()
113 }
114}
115
116impl TryIntoRequest for CreateGuildExternalScheduledEvent<'_> {
117 fn try_into_request(self) -> Result<Request, Error> {
118 self.0.try_into_request()
119 }
120}