twilight_http/request/scheduled_event/create_guild_scheduled_event/
voice.rs1use super::{CreateGuildScheduledEvent, CreateGuildScheduledEventFields};
2use crate::{
3 error::Error,
4 request::{AuditLogReason, Request, TryIntoRequest},
5 response::{Response, ResponseFuture},
6};
7use std::future::IntoFuture;
8use twilight_model::{
9 guild::scheduled_event::{EntityType, GuildScheduledEvent},
10 id::{marker::ChannelMarker, Id},
11 util::Timestamp,
12};
13use twilight_validate::request::{
14 audit_reason as validate_audit_reason,
15 scheduled_event_description as validate_scheduled_event_description,
16};
17
18#[must_use = "requests must be configured and executed"]
20pub struct CreateGuildVoiceScheduledEvent<'a>(CreateGuildScheduledEvent<'a>);
21
22impl<'a> CreateGuildVoiceScheduledEvent<'a> {
23 pub(crate) fn new(
24 mut inner: CreateGuildScheduledEvent<'a>,
25 channel_id: Id<ChannelMarker>,
26 name: &'a str,
27 scheduled_start_time: &'a Timestamp,
28 ) -> Self {
29 inner.fields = inner.fields.map(|fields| CreateGuildScheduledEventFields {
30 channel_id: Some(channel_id),
31 entity_type: Some(EntityType::Voice),
32 name: Some(name),
33 scheduled_start_time: Some(scheduled_start_time),
34 ..fields
35 });
36
37 Self(inner)
38 }
39
40 pub fn description(mut self, description: &'a str) -> Self {
51 self.0.fields = self.0.fields.and_then(|mut fields| {
52 validate_scheduled_event_description(description)?;
53 fields.description.replace(description);
54
55 Ok(fields)
56 });
57
58 self
59 }
60
61 pub fn image(mut self, image: &'a str) -> Self {
69 self.0.fields = self.0.fields.map(|mut fields| {
70 fields.image = Some(image);
71
72 fields
73 });
74
75 self
76 }
77
78 pub fn scheduled_end_time(mut self, scheduled_end_time: &'a Timestamp) -> Self {
82 self.0.fields = self.0.fields.map(|mut fields| {
83 fields.scheduled_end_time = Some(scheduled_end_time);
84
85 fields
86 });
87
88 self
89 }
90}
91
92impl<'a> AuditLogReason<'a> for CreateGuildVoiceScheduledEvent<'a> {
93 fn reason(mut self, reason: &'a str) -> Self {
94 self.0.reason = validate_audit_reason(reason).and(Ok(Some(reason)));
95
96 self
97 }
98}
99
100impl IntoFuture for CreateGuildVoiceScheduledEvent<'_> {
101 type Output = Result<Response<GuildScheduledEvent>, Error>;
102
103 type IntoFuture = ResponseFuture<GuildScheduledEvent>;
104
105 fn into_future(self) -> Self::IntoFuture {
106 self.0.exec()
107 }
108}
109
110impl TryIntoRequest for CreateGuildVoiceScheduledEvent<'_> {
111 fn try_into_request(self) -> Result<Request, Error> {
112 self.0.try_into_request()
113 }
114}