twilight_http/request/scheduled_event/
get_guild_scheduled_event_users.rs1#[cfg(not(target_os = "wasi"))]
2use crate::response::{Response, ResponseFuture, marker::ListBody};
3use crate::{
4 client::Client,
5 error::Error,
6 request::{Request, TryIntoRequest},
7 routing::Route,
8};
9use std::future::IntoFuture;
10use twilight_model::{
11 guild::scheduled_event::GuildScheduledEventUser,
12 id::{
13 Id,
14 marker::{GuildMarker, ScheduledEventMarker, UserMarker},
15 },
16};
17use twilight_validate::request::{
18 ValidationError, scheduled_event_get_users as validate_scheduled_event_get_users,
19};
20
21struct GetGuildScheduledEventUsersFields {
22 after: Option<Id<UserMarker>>,
23 before: Option<Id<UserMarker>>,
24 limit: Option<u16>,
25 scheduled_event_id: Id<ScheduledEventMarker>,
26 with_member: Option<bool>,
27}
28
29#[must_use = "requests must be configured and executed"]
41pub struct GetGuildScheduledEventUsers<'a> {
42 fields: Result<GetGuildScheduledEventUsersFields, ValidationError>,
43 guild_id: Id<GuildMarker>,
44 http: &'a Client,
45}
46
47impl<'a> GetGuildScheduledEventUsers<'a> {
48 pub(crate) const fn new(
49 http: &'a Client,
50 guild_id: Id<GuildMarker>,
51 scheduled_event_id: Id<ScheduledEventMarker>,
52 ) -> Self {
53 Self {
54 fields: Ok(GetGuildScheduledEventUsersFields {
55 after: None,
56 before: None,
57 limit: None,
58 scheduled_event_id,
59 with_member: None,
60 }),
61 guild_id,
62 http,
63 }
64 }
65
66 pub const fn after(mut self, after: Id<UserMarker>) -> Self {
73 if let Ok(fields) = self.fields.as_mut() {
74 fields.after = Some(after);
75 }
76
77 self
78 }
79
80 pub const fn before(mut self, before: Id<UserMarker>) -> Self {
86 if let Ok(fields) = self.fields.as_mut() {
87 fields.before = Some(before);
88 }
89
90 self
91 }
92
93 pub fn limit(mut self, limit: u16) -> Self {
104 self.fields = self.fields.and_then(|mut fields| {
105 validate_scheduled_event_get_users(limit)?;
106 fields.limit = Some(limit);
107
108 Ok(fields)
109 });
110
111 self
112 }
113
114 pub const fn with_member(mut self, with_member: bool) -> Self {
116 if let Ok(fields) = self.fields.as_mut() {
117 fields.with_member = Some(with_member);
118 }
119
120 self
121 }
122}
123
124#[cfg(not(target_os = "wasi"))]
125impl IntoFuture for GetGuildScheduledEventUsers<'_> {
126 type Output = Result<Response<ListBody<GuildScheduledEventUser>>, Error>;
127
128 type IntoFuture = ResponseFuture<ListBody<GuildScheduledEventUser>>;
129
130 fn into_future(self) -> Self::IntoFuture {
131 let http = self.http;
132
133 match self.try_into_request() {
134 Ok(request) => http.request(request),
135 Err(source) => ResponseFuture::error(source),
136 }
137 }
138}
139
140impl TryIntoRequest for GetGuildScheduledEventUsers<'_> {
141 fn try_into_request(self) -> Result<Request, Error> {
142 let fields = self.fields.map_err(Error::validation)?;
143
144 Ok(Request::from_route(&Route::GetGuildScheduledEventUsers {
145 after: fields.after.map(Id::get),
146 before: fields.before.map(Id::get),
147 guild_id: self.guild_id.get(),
148 limit: fields.limit,
149 scheduled_event_id: fields.scheduled_event_id.get(),
150 with_member: fields.with_member.unwrap_or_default(),
151 }))
152 }
153}