twitter_v2/api/
with_user_ctx.rs

1use super::TwitterApi;
2use crate::api_result::ApiResult;
3use crate::authorization::Authorization;
4use crate::data::{Blocking, Following, List, Muting, Pinned, Space, Tweet, User};
5use crate::error::Result;
6use crate::id::{IntoNumericId, NumericId};
7use crate::meta::{ResultCountMeta, SimpleResultCountMeta, TweetsMeta};
8use crate::query::{
9    GetPaginatedListsRequestBuilder, GetRelatedUsersRequestBuilder, GetSpacesRequestBuilder,
10    GetTimelineRequestBuilder,
11};
12
13pub struct TwitterApiWithUserCtx<A> {
14    user_id: NumericId,
15    client: TwitterApi<A>,
16}
17
18impl<A> TwitterApi<A>
19where
20    A: Authorization,
21{
22    pub async fn with_user_ctx(&self) -> Result<TwitterApiWithUserCtx<A>> {
23        let user_id = self.get_users_me().send().await?.into_data().unwrap().id;
24        Ok(TwitterApiWithUserCtx {
25            user_id,
26            client: self.clone(),
27        })
28    }
29}
30
31impl<A> TwitterApiWithUserCtx<A>
32where
33    A: Authorization,
34{
35    pub fn get_my_owned_lists(
36        &self,
37    ) -> GetPaginatedListsRequestBuilder<A, Vec<List>, ResultCountMeta> {
38        self.client.get_user_owned_lists(self.user_id)
39    }
40    pub fn get_my_list_memberships(
41        &self,
42    ) -> GetPaginatedListsRequestBuilder<A, Vec<List>, ResultCountMeta> {
43        self.client.get_user_list_memberships(self.user_id)
44    }
45    pub fn get_my_followed_lists(
46        &self,
47    ) -> GetPaginatedListsRequestBuilder<A, Vec<List>, ResultCountMeta> {
48        self.client.get_user_followed_lists(self.user_id)
49    }
50    pub async fn post_my_followed_list(
51        &self,
52        list_id: impl IntoNumericId,
53    ) -> ApiResult<A, Following, ()> {
54        self.client
55            .post_user_followed_list(self.user_id, list_id)
56            .await
57    }
58    pub async fn delete_my_followed_list(
59        &self,
60        list_id: impl IntoNumericId,
61    ) -> ApiResult<A, Following, ()> {
62        self.client
63            .delete_user_followed_list(self.user_id, list_id)
64            .await
65    }
66    pub async fn post_my_pinned_list(
67        &self,
68        list_id: impl IntoNumericId,
69    ) -> ApiResult<A, Pinned, ()> {
70        self.client
71            .post_user_pinned_list(self.user_id, list_id)
72            .await
73    }
74    pub async fn delete_my_pinned_list(
75        &self,
76        list_id: impl IntoNumericId,
77    ) -> ApiResult<A, Pinned, ()> {
78        self.client
79            .delete_user_pinned_list(self.user_id, list_id)
80            .await
81    }
82    pub fn get_my_spaces(&self) -> GetSpacesRequestBuilder<A, Vec<Space>, SimpleResultCountMeta> {
83        self.client.get_spaces_by_creator_ids([self.user_id])
84    }
85    pub fn get_my_tweets(&self) -> GetTimelineRequestBuilder<A, Vec<Tweet>, TweetsMeta> {
86        self.client.get_user_tweets(self.user_id)
87    }
88    pub fn get_my_mentions(&self) -> GetTimelineRequestBuilder<A, Vec<Tweet>, TweetsMeta> {
89        self.client.get_user_tweets(self.user_id)
90    }
91    pub fn get_my_followers(&self) -> GetRelatedUsersRequestBuilder<A, Vec<User>, ResultCountMeta> {
92        self.client.get_user_followers(self.user_id)
93    }
94    pub fn get_my_following(&self) -> GetRelatedUsersRequestBuilder<A, Vec<User>, ResultCountMeta> {
95        self.client.get_user_following(self.user_id)
96    }
97    pub async fn post_my_following(
98        &self,
99        target_user_id: impl IntoNumericId,
100    ) -> ApiResult<A, Following, ()> {
101        self.client
102            .post_user_following(self.user_id, target_user_id)
103            .await
104    }
105    pub async fn delete_my_following(
106        &self,
107        target_user_id: impl IntoNumericId,
108    ) -> ApiResult<A, Following, ()> {
109        self.client
110            .delete_user_following(self.user_id, target_user_id)
111            .await
112    }
113    pub fn get_my_blocking(&self) -> GetRelatedUsersRequestBuilder<A, Vec<User>, ResultCountMeta> {
114        self.client.get_user_blocking(self.user_id)
115    }
116    pub async fn post_my_blocking(
117        &self,
118        target_user_id: impl IntoNumericId,
119    ) -> ApiResult<A, Blocking, ()> {
120        self.client
121            .post_user_blocking(self.user_id, target_user_id)
122            .await
123    }
124    pub async fn delete_my_blocking(
125        &self,
126        target_user_id: impl IntoNumericId,
127    ) -> ApiResult<A, Blocking, ()> {
128        self.client
129            .delete_user_blocking(self.user_id, target_user_id)
130            .await
131    }
132    pub async fn post_my_muting(
133        &self,
134        target_user_id: impl IntoNumericId,
135    ) -> ApiResult<A, Muting, ()> {
136        self.client
137            .post_user_muting(self.user_id, target_user_id)
138            .await
139    }
140    pub async fn delete_my_muting(
141        &self,
142        target_user_id: impl IntoNumericId,
143    ) -> ApiResult<A, Muting, ()> {
144        self.client
145            .delete_user_muting(self.user_id, target_user_id)
146            .await
147    }
148}