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