use crate::error::HttpError;
use crate::http::client::HttpClient;
use crate::http::routing::Route;
use crate::model::channel::Channel;
use crate::model::id::{ChannelId, UserId};
use crate::model::permissions::Permissions;
impl HttpClient {
pub async fn get_channel(&self, channel_id: ChannelId) -> Result<Channel, HttpError> {
self.request_no_body(Route::GetChannel { channel_id }).await
}
pub async fn modify_channel(
&self,
channel_id: ChannelId,
params: &ModifyChannel,
) -> Result<Channel, HttpError> {
self.request(Route::ModifyChannel { channel_id }, Some(params))
.await
}
pub async fn delete_channel(&self, channel_id: ChannelId) -> Result<(), HttpError> {
self.request_empty(Route::DeleteChannel { channel_id }, None::<&()>)
.await
}
pub async fn trigger_typing(&self, channel_id: ChannelId) -> Result<(), HttpError> {
#[derive(serde::Serialize)]
struct Body {}
self.request_empty(Route::TriggerTyping { channel_id }, Some(&Body {}))
.await
}
pub async fn set_channel_permission_overwrite(
&self,
channel_id: ChannelId,
overwrite_id: impl Into<String>,
params: &PermissionOverwriteRequest,
) -> Result<(), HttpError> {
self.request_empty(
Route::SetChannelPermissionOverwrite {
channel_id,
overwrite_id: overwrite_id.into(),
},
Some(params),
)
.await
}
pub async fn delete_channel_permission_overwrite(
&self,
channel_id: ChannelId,
overwrite_id: impl Into<String>,
) -> Result<(), HttpError> {
self.request_empty(
Route::DeleteChannelPermissionOverwrite {
channel_id,
overwrite_id: overwrite_id.into(),
},
None::<&()>,
)
.await
}
pub async fn add_group_dm_recipient(
&self,
channel_id: ChannelId,
user_id: UserId,
) -> Result<(), HttpError> {
#[derive(serde::Serialize)]
struct Body {}
self.request_empty(
Route::AddGroupDmRecipient {
channel_id,
user_id,
},
Some(&Body {}),
)
.await
}
pub async fn remove_group_dm_recipient(
&self,
channel_id: ChannelId,
user_id: UserId,
) -> Result<(), HttpError> {
self.request_empty(
Route::RemoveGroupDmRecipient {
channel_id,
user_id,
},
None::<&()>,
)
.await
}
}
#[derive(Debug, Clone, Copy, serde_repr::Serialize_repr)]
#[repr(u8)]
pub enum PermissionOverwriteType {
Role = 0,
Member = 1,
}
#[derive(Debug, serde::Serialize)]
pub struct PermissionOverwriteRequest {
#[serde(rename = "type")]
pub kind: PermissionOverwriteType,
#[serde(skip_serializing_if = "Option::is_none")]
pub allow: Option<Permissions>,
#[serde(skip_serializing_if = "Option::is_none")]
pub deny: Option<Permissions>,
}
#[derive(Debug, Default, serde::Serialize)]
pub struct ModifyChannel {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub topic: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub nsfw: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rate_limit_per_user: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub position: Option<i32>,
}