twilight_http/request/channel/thread/
get_thread_member.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    channel::thread::ThreadMember,
11    id::{
12        marker::{ChannelMarker, UserMarker},
13        Id,
14    },
15};
16
17/// Returns a [`ThreadMember`] in a thread.
18///
19/// [`ThreadMember`]: twilight_model::channel::thread::ThreadMember
20#[must_use = "requests must be configured and executed"]
21pub struct GetThreadMember<'a> {
22    channel_id: Id<ChannelMarker>,
23    http: &'a Client,
24    user_id: Id<UserMarker>,
25}
26
27impl<'a> GetThreadMember<'a> {
28    pub(crate) const fn new(
29        http: &'a Client,
30        channel_id: Id<ChannelMarker>,
31        user_id: Id<UserMarker>,
32    ) -> Self {
33        Self {
34            channel_id,
35            http,
36            user_id,
37        }
38    }
39}
40
41impl IntoFuture for GetThreadMember<'_> {
42    type Output = Result<Response<ThreadMember>, Error>;
43
44    type IntoFuture = ResponseFuture<ThreadMember>;
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 GetThreadMember<'_> {
57    fn try_into_request(self) -> Result<Request, Error> {
58        Ok(Request::from_route(&Route::GetThreadMember {
59            channel_id: self.channel_id.get(),
60            user_id: self.user_id.get(),
61        }))
62    }
63}