twilight_http/request/poll/
end_poll.rs1use crate::{
2 client::Client,
3 error::Error,
4 request::{Request, TryIntoRequest},
5 response::{Response, ResponseFuture},
6 routing::Route,
7};
8use serde::Serialize;
9use std::future::IntoFuture;
10use twilight_model::{
11 channel::Message,
12 id::{
13 marker::{ChannelMarker, MessageMarker},
14 Id,
15 },
16};
17
18#[derive(Serialize)]
19struct EndPollFields {
20 channel_id: Id<ChannelMarker>,
21 message_id: Id<MessageMarker>,
22}
23
24#[must_use = "requests must be configured and executed"]
26pub struct EndPoll<'a> {
27 fields: EndPollFields,
28 http: &'a Client,
29}
30
31impl<'a> EndPoll<'a> {
32 pub(crate) const fn new(
33 http: &'a Client,
34 channel_id: Id<ChannelMarker>,
35 message_id: Id<MessageMarker>,
36 ) -> Self {
37 Self {
38 fields: EndPollFields {
39 channel_id,
40 message_id,
41 },
42 http,
43 }
44 }
45}
46
47impl IntoFuture for EndPoll<'_> {
48 type Output = Result<Response<Message>, Error>;
49 type IntoFuture = ResponseFuture<Message>;
50
51 fn into_future(self) -> Self::IntoFuture {
52 let http = self.http;
53
54 match self.try_into_request() {
55 Ok(request) => http.request(request),
56 Err(source) => ResponseFuture::error(source),
57 }
58 }
59}
60
61impl TryIntoRequest for EndPoll<'_> {
62 fn try_into_request(self) -> Result<Request, Error> {
63 Ok(Request::from_route(&Route::EndPoll {
64 channel_id: self.fields.channel_id.get(),
65 message_id: self.fields.message_id.get(),
66 }))
67 }
68}