twilight_http/request/guild/ban/
get_ban.rs

1use crate::{
2    client::Client,
3    error::Error,
4    request::{Request, TryIntoRequest},
5    response::{Response, ResponseFuture},
6    routing::Route,
7};
8use std::future::IntoFuture;
9use twilight_model::{
10    guild::Ban,
11    id::{
12        marker::{GuildMarker, UserMarker},
13        Id,
14    },
15};
16
17/// Get information about a ban of a guild.
18///
19/// Includes the user banned and the reason.
20#[must_use = "requests must be configured and executed"]
21pub struct GetBan<'a> {
22    guild_id: Id<GuildMarker>,
23    http: &'a Client,
24    user_id: Id<UserMarker>,
25}
26
27impl<'a> GetBan<'a> {
28    pub(crate) const fn new(
29        http: &'a Client,
30        guild_id: Id<GuildMarker>,
31        user_id: Id<UserMarker>,
32    ) -> Self {
33        Self {
34            guild_id,
35            http,
36            user_id,
37        }
38    }
39}
40
41impl IntoFuture for GetBan<'_> {
42    type Output = Result<Response<Ban>, Error>;
43
44    type IntoFuture = ResponseFuture<Ban>;
45
46    fn into_future(self) -> Self::IntoFuture {
47        let http = self.http;
48
49        match self.try_into_request() {
50            Ok(request) => http.request(request),
51            Err(source) => ResponseFuture::error(source),
52        }
53    }
54}
55
56impl TryIntoRequest for GetBan<'_> {
57    fn try_into_request(self) -> Result<Request, Error> {
58        Ok(Request::from_route(&Route::GetBan {
59            guild_id: self.guild_id.get(),
60            user_id: self.user_id.get(),
61        }))
62    }
63}