twitter-v2 0.1.8

Twitter API v2
Documentation
use super::TwitterApi;
use crate::api_result::ApiResult;
use crate::authorization::Authorization;
use crate::data::{Deleted, Following, IsMember, List, Pinned, Tweet, Updated, User};
use crate::id::IntoNumericId;
use crate::meta::ResultCountMeta;
use crate::query::{
    GetLimitedRelatedTweetsRequestBuilder, GetListsRequestBuilder, GetPaginatedListsRequestBuilder,
    GetRelatedUsersRequestBuilder,
};
use crate::requests::{ListBuilder, ListId, UserId};
use reqwest::Method;

impl<A> TwitterApi<A>
where
    A: Authorization,
{
    pub fn get_list(&self, id: impl IntoNumericId) -> GetListsRequestBuilder<A, List, ()> {
        GetListsRequestBuilder::new(self, self.url(format!("lists/{id}")).unwrap())
    }
    pub fn get_user_owned_lists(
        &self,
        id: impl IntoNumericId,
    ) -> GetPaginatedListsRequestBuilder<A, Vec<List>, ResultCountMeta> {
        GetPaginatedListsRequestBuilder::new(
            self,
            self.url(format!("users/{id}/owned_lists")).unwrap(),
        )
    }
    pub fn post_list(&self, name: impl ToString) -> ListBuilder<A, List> {
        let mut builder = ListBuilder::new(self, self.url("lists").unwrap(), Method::POST);
        builder.name(name);
        builder
    }
    pub fn put_list(&self, id: impl IntoNumericId) -> ListBuilder<A, Updated> {
        ListBuilder::new(self, self.url(format!("lists/{id}")).unwrap(), Method::PUT)
    }
    pub async fn delete_list(&self, id: impl IntoNumericId) -> ApiResult<A, Deleted, ()> {
        self.send(self.request(Method::DELETE, self.url(format!("lists/{id}"))?))
            .await
    }
    pub fn get_list_tweets(
        &self,
        id: impl IntoNumericId,
    ) -> GetLimitedRelatedTweetsRequestBuilder<A, Vec<Tweet>, ResultCountMeta> {
        GetLimitedRelatedTweetsRequestBuilder::new(
            self,
            self.url(format!("lists/{id}/tweets")).unwrap(),
        )
    }
    pub fn get_user_list_memberships(
        &self,
        id: impl IntoNumericId,
    ) -> GetPaginatedListsRequestBuilder<A, Vec<List>, ResultCountMeta> {
        GetPaginatedListsRequestBuilder::new(
            self,
            self.url(format!("users/{id}/list_memberships")).unwrap(),
        )
    }
    pub fn get_list_members(
        &self,
        id: impl IntoNumericId,
    ) -> GetRelatedUsersRequestBuilder<A, Vec<User>, ResultCountMeta> {
        GetRelatedUsersRequestBuilder::new(self, self.url(format!("lists/{id}/members")).unwrap())
    }
    pub async fn post_list_member(
        &self,
        id: impl IntoNumericId,
        user_id: impl IntoNumericId,
    ) -> ApiResult<A, IsMember, ()> {
        self.send(
            self.request(Method::POST, self.url(format!("lists/{id}/members"))?)
                .json(&UserId::from(user_id)),
        )
        .await
    }
    pub async fn delete_list_member(
        &self,
        id: impl IntoNumericId,
        user_id: impl IntoNumericId,
    ) -> ApiResult<A, IsMember, ()> {
        self.send(self.request(
            Method::DELETE,
            self.url(format!("lists/{id}/members/{user_id}"))?,
        ))
        .await
    }
    pub fn get_list_followers(
        &self,
        id: impl IntoNumericId,
    ) -> GetRelatedUsersRequestBuilder<A, Vec<User>, ResultCountMeta> {
        GetRelatedUsersRequestBuilder::new(self, self.url(format!("lists/{id}/followers")).unwrap())
    }
    pub fn get_user_followed_lists(
        &self,
        id: impl IntoNumericId,
    ) -> GetPaginatedListsRequestBuilder<A, Vec<List>, ResultCountMeta> {
        GetPaginatedListsRequestBuilder::new(
            self,
            self.url(format!("users/{id}/followed_lists")).unwrap(),
        )
    }
    pub async fn post_user_followed_list(
        &self,
        id: impl IntoNumericId,
        list_id: impl IntoNumericId,
    ) -> ApiResult<A, Following, ()> {
        self.send(
            self.request(
                Method::POST,
                self.url(format!("users/{id}/followed_lists"))?,
            )
            .json(&ListId::from(list_id)),
        )
        .await
    }
    pub async fn delete_user_followed_list(
        &self,
        id: impl IntoNumericId,
        list_id: impl IntoNumericId,
    ) -> ApiResult<A, Following, ()> {
        self.send(self.request(
            Method::DELETE,
            self.url(format!("users/{id}/followed_lists/{list_id}"))?,
        ))
        .await
    }
    pub fn get_user_pinned_lists(
        &self,
        id: impl IntoNumericId,
    ) -> GetListsRequestBuilder<A, Vec<List>, ()> {
        GetListsRequestBuilder::new(self, self.url(format!("users/{id}/lists")).unwrap())
    }
    pub async fn post_user_pinned_list(
        &self,
        id: impl IntoNumericId,
        list_id: impl IntoNumericId,
    ) -> ApiResult<A, Pinned, ()> {
        self.send(
            self.request(Method::POST, self.url(format!("users/{id}/pinned_lists"))?)
                .json(&ListId::from(list_id)),
        )
        .await
    }
    pub async fn delete_user_pinned_list(
        &self,
        id: impl IntoNumericId,
        list_id: impl IntoNumericId,
    ) -> ApiResult<A, Pinned, ()> {
        self.send(self.request(
            Method::DELETE,
            self.url(format!("users/{id}/pinned_lists/{list_id}"))?,
        ))
        .await
    }
}