twilight_http/request/poll/
get_answer_voters.rs1use crate::{
2 client::Client,
3 error::Error,
4 request::{Request, TryIntoRequest},
5 response::{Response, ResponseFuture},
6 routing::Route,
7};
8use serde::{Deserialize, Serialize};
9use std::future::IntoFuture;
10use twilight_model::{
11 id::{
12 marker::{ChannelMarker, MessageMarker, UserMarker},
13 Id,
14 },
15 user::User,
16};
17
18#[derive(Serialize)]
19struct GetAnswerVotersFields {
20 after: Option<Id<UserMarker>>,
21 answer_id: u8,
22 channel_id: Id<ChannelMarker>,
23 limit: Option<u8>,
24 message_id: Id<MessageMarker>,
25}
26
27#[must_use = "requests must be configured and executed"]
29pub struct GetAnswerVoters<'a> {
30 fields: GetAnswerVotersFields,
31 http: &'a Client,
32}
33
34#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
35pub struct GetAnswerVotersResponse {
36 pub users: Vec<User>,
37}
38
39impl<'a> GetAnswerVoters<'a> {
40 pub(crate) const fn new(
41 http: &'a Client,
42 channel_id: Id<ChannelMarker>,
43 message_id: Id<MessageMarker>,
44 answer_id: u8,
45 ) -> Self {
46 Self {
47 fields: GetAnswerVotersFields {
48 after: None,
49 answer_id,
50 channel_id,
51 limit: None,
52 message_id,
53 },
54 http,
55 }
56 }
57
58 pub fn after(mut self, after: Id<UserMarker>) -> Self {
60 self.fields.after.replace(after);
61
62 self
63 }
64
65 pub fn limit(mut self, limit: u8) -> Self {
69 self.fields.limit.replace(limit);
70
71 self
72 }
73}
74
75impl IntoFuture for GetAnswerVoters<'_> {
76 type Output = Result<Response<GetAnswerVotersResponse>, Error>;
77 type IntoFuture = ResponseFuture<GetAnswerVotersResponse>;
78
79 fn into_future(self) -> Self::IntoFuture {
80 let http = self.http;
81
82 match self.try_into_request() {
83 Ok(request) => http.request(request),
84 Err(source) => ResponseFuture::error(source),
85 }
86 }
87}
88
89impl TryIntoRequest for GetAnswerVoters<'_> {
90 fn try_into_request(self) -> Result<Request, Error> {
91 Ok(Request::from_route(&Route::GetAnswerVoters {
92 after: self.fields.after.map(Id::get),
93 answer_id: self.fields.answer_id,
94 channel_id: self.fields.channel_id.get(),
95 limit: self.fields.limit,
96 message_id: self.fields.message_id.get(),
97 }))
98 }
99}