use crate::error::HttpError;
use crate::http::client::HttpClient;
use crate::http::routing::Route;
use crate::model::channel::Channel;
use crate::model::id::UserId;
use crate::model::user::User;
impl HttpClient {
pub async fn get_current_user(&self) -> Result<User, HttpError> {
self.request_no_body(Route::GetCurrentUser).await
}
pub async fn get_user(&self, user_id: UserId) -> Result<User, HttpError> {
self.request_no_body(Route::GetUser { user_id }).await
}
pub async fn modify_current_user(&self, params: &ModifyCurrentUser) -> Result<User, HttpError> {
self.request(Route::ModifyCurrentUser, Some(params)).await
}
pub async fn create_dm(&self, recipient_id: UserId) -> Result<Channel, HttpError> {
#[derive(serde::Serialize)]
struct Body {
recipient_id: UserId,
}
self.request(Route::CreateDm, Some(&Body { recipient_id }))
.await
}
pub async fn create_group_dm(&self, recipients: &[UserId]) -> Result<Channel, HttpError> {
#[derive(serde::Serialize)]
struct Body<'a> {
recipients: &'a [UserId],
}
self.request(Route::CreateDm, Some(&Body { recipients }))
.await
}
pub async fn list_private_channels(&self) -> Result<Vec<Channel>, HttpError> {
self.request_no_body(Route::ListPrivateChannels).await
}
pub async fn get_user_profile(
&self,
target_id: UserId,
) -> Result<serde_json::Value, HttpError> {
self.request_no_body(Route::GetUserProfile { target_id })
.await
}
pub async fn list_current_user_mentions(
&self,
) -> Result<Vec<crate::model::message::Message>, HttpError> {
self.request_no_body(Route::ListCurrentUserMentions).await
}
pub async fn delete_current_user_mention(
&self,
message_id: crate::model::id::MessageId,
) -> Result<(), HttpError> {
self.request_empty(Route::DeleteCurrentUserMention { message_id }, None::<&()>)
.await
}
}
#[derive(Debug, Default, serde::Serialize)]
pub struct ModifyCurrentUser {
#[serde(skip_serializing_if = "Option::is_none")]
pub username: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub global_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bio: Option<String>,
}