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