use crate::common::*;
use crate::error::Result;
use crate::{auth, cursor, links};
use super::*;
pub async fn lookup<T, I>(accts: I, token: &auth::Token) -> Result<Response<Vec<TwitterUser>>>
where
T: Into<UserID>,
I: IntoIterator<Item = T>,
{
let (id_param, name_param) = multiple_names_param(accts);
let params = ParamList::new()
.extended_tweets()
.add_param("user_id", id_param)
.add_param("screen_name", name_param);
let req = post(links::users::LOOKUP, token, Some(¶ms));
request_with_json_response(req).await
}
pub async fn show<T: Into<UserID>>(acct: T, token: &auth::Token) -> Result<Response<TwitterUser>> {
let params = ParamList::new()
.extended_tweets()
.add_user_param(acct.into());
let req = get(links::users::SHOW, token, Some(¶ms));
request_with_json_response(req).await
}
pub async fn friends_no_retweets(token: &auth::Token) -> Result<Response<Vec<u64>>> {
let req = get(links::users::FRIENDS_NO_RETWEETS, token, None);
request_with_json_response(req).await
}
pub async fn relation<F, T>(from: F, to: T, token: &auth::Token) -> Result<Response<Relationship>>
where
F: Into<UserID>,
T: Into<UserID>,
{
let mut params = match from.into() {
UserID::ID(id) => ParamList::new().add_param("source_id", id.to_string()),
UserID::ScreenName(name) => ParamList::new().add_param("source_screen_name", name),
};
match to.into() {
UserID::ID(id) => params.add_param_ref("target_id", id.to_string()),
UserID::ScreenName(name) => params.add_param_ref("target_screen_name", name),
};
let req = get(links::users::FRIENDSHIP_SHOW, token, Some(¶ms));
request_with_json_response(req).await
}
pub async fn relation_lookup<T, I>(
accts: I,
token: &auth::Token,
) -> Result<Response<Vec<RelationLookup>>>
where
T: Into<UserID>,
I: IntoIterator<Item = T>,
{
let (id_param, name_param) = multiple_names_param(accts);
let params = ParamList::new()
.add_param("user_id", id_param)
.add_param("screen_name", name_param);
let req = get(links::users::FRIENDSHIP_LOOKUP, token, Some(¶ms));
request_with_json_response(req).await
}
pub fn search<S: Into<CowStr>>(query: S, token: &auth::Token) -> UserSearch {
UserSearch::new(query, token)
}
pub fn friends_of<T: Into<UserID>>(
acct: T,
token: &auth::Token,
) -> cursor::CursorIter<cursor::UserCursor> {
let params = ParamList::new().add_user_param(acct.into());
cursor::CursorIter::new(links::users::FRIENDS_LIST, token, Some(params), Some(20))
}
pub fn friends_ids<T: Into<UserID>>(
acct: T,
token: &auth::Token,
) -> cursor::CursorIter<cursor::IDCursor> {
let params = ParamList::new().add_user_param(acct.into());
cursor::CursorIter::new(links::users::FRIENDS_IDS, token, Some(params), Some(500))
}
pub fn followers_of<T: Into<UserID>>(
acct: T,
token: &auth::Token,
) -> cursor::CursorIter<cursor::UserCursor> {
let params = ParamList::new()
.extended_tweets()
.add_user_param(acct.into());
cursor::CursorIter::new(links::users::FOLLOWERS_LIST, token, Some(params), Some(20))
}
pub fn followers_ids<T: Into<UserID>>(
acct: T,
token: &auth::Token,
) -> cursor::CursorIter<cursor::IDCursor> {
let params = ParamList::new().add_user_param(acct.into());
cursor::CursorIter::new(links::users::FOLLOWERS_IDS, token, Some(params), Some(500))
}
pub fn blocks(token: &auth::Token) -> cursor::CursorIter<cursor::UserCursor> {
cursor::CursorIter::new(links::users::BLOCKS_LIST, token, None, None)
}
pub fn blocks_ids(token: &auth::Token) -> cursor::CursorIter<cursor::IDCursor> {
cursor::CursorIter::new(links::users::BLOCKS_IDS, token, None, None)
}
pub fn mutes(token: &auth::Token) -> cursor::CursorIter<cursor::UserCursor> {
cursor::CursorIter::new(links::users::MUTES_LIST, token, None, None)
}
pub fn mutes_ids(token: &auth::Token) -> cursor::CursorIter<cursor::IDCursor> {
cursor::CursorIter::new(links::users::MUTES_IDS, token, None, None)
}
pub fn incoming_requests(token: &auth::Token) -> cursor::CursorIter<cursor::IDCursor> {
cursor::CursorIter::new(links::users::FRIENDSHIPS_INCOMING, token, None, None)
}
pub fn outgoing_requests(token: &auth::Token) -> cursor::CursorIter<cursor::IDCursor> {
cursor::CursorIter::new(links::users::FRIENDSHIPS_OUTGOING, token, None, None)
}
pub async fn follow<T: Into<UserID>>(
acct: T,
notifications: bool,
token: &auth::Token,
) -> Result<Response<TwitterUser>> {
let params = ParamList::new()
.extended_tweets()
.add_user_param(acct.into())
.add_param("follow", notifications.to_string());
let req = post(links::users::FOLLOW, token, Some(¶ms));
request_with_json_response(req).await
}
pub async fn unfollow<T: Into<UserID>>(
acct: T,
token: &auth::Token,
) -> Result<Response<TwitterUser>> {
let params = ParamList::new()
.extended_tweets()
.add_user_param(acct.into());
let req = post(links::users::UNFOLLOW, token, Some(¶ms));
request_with_json_response(req).await
}
pub async fn update_follow<T>(
acct: T,
notifications: Option<bool>,
retweets: Option<bool>,
token: &auth::Token,
) -> Result<Response<Relationship>>
where
T: Into<UserID>,
{
let params = ParamList::new()
.add_user_param(acct.into())
.add_opt_param("device", notifications.map(|v| v.to_string()))
.add_opt_param("retweets", retweets.map(|v| v.to_string()));
let req = post(links::users::FRIENDSHIP_UPDATE, token, Some(¶ms));
request_with_json_response(req).await
}
pub async fn block<T: Into<UserID>>(acct: T, token: &auth::Token) -> Result<Response<TwitterUser>> {
let params = ParamList::new()
.extended_tweets()
.add_user_param(acct.into());
let req = post(links::users::BLOCK, token, Some(¶ms));
request_with_json_response(req).await
}
pub async fn report_spam<T: Into<UserID>>(
acct: T,
token: &auth::Token,
) -> Result<Response<TwitterUser>> {
let params = ParamList::new()
.extended_tweets()
.add_user_param(acct.into());
let req = post(links::users::REPORT_SPAM, token, Some(¶ms));
request_with_json_response(req).await
}
pub async fn unblock<T: Into<UserID>>(
acct: T,
token: &auth::Token,
) -> Result<Response<TwitterUser>> {
let params = ParamList::new()
.extended_tweets()
.add_user_param(acct.into());
let req = post(links::users::UNBLOCK, token, Some(¶ms));
request_with_json_response(req).await
}
pub async fn mute<T: Into<UserID>>(acct: T, token: &auth::Token) -> Result<Response<TwitterUser>> {
let params = ParamList::new()
.extended_tweets()
.add_user_param(acct.into());
let req = post(links::users::MUTE, token, Some(¶ms));
request_with_json_response(req).await
}
pub async fn unmute<T: Into<UserID>>(
acct: T,
token: &auth::Token,
) -> Result<Response<TwitterUser>> {
let params = ParamList::new()
.extended_tweets()
.add_user_param(acct.into());
let req = post(links::users::UNMUTE, token, Some(¶ms));
request_with_json_response(req).await
}