use serde::{Deserialize, Serialize};
use crate::error::HttpError;
use crate::http::client::HttpClient;
use crate::http::routing::Route;
use crate::model::channel::Channel;
use crate::model::guild::Guild;
use crate::model::id::{ChannelId, GuildId};
use crate::model::user::User;
#[derive(Debug, Clone, Deserialize)]
pub struct Invite {
pub code: String,
#[serde(default)]
pub guild: Option<Guild>,
#[serde(default)]
pub channel: Option<Channel>,
#[serde(default)]
pub inviter: Option<User>,
#[serde(default)]
pub uses: Option<i32>,
#[serde(default)]
pub max_uses: Option<i32>,
#[serde(default)]
pub max_age: Option<i32>,
#[serde(default)]
pub temporary: Option<bool>,
#[serde(default)]
pub created_at: Option<String>,
}
#[derive(Debug, Default, Serialize)]
pub struct CreateInvite {
#[serde(skip_serializing_if = "Option::is_none")]
pub max_age: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_uses: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub temporary: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub unique: Option<bool>,
}
impl CreateInvite {
pub fn new() -> Self {
Self::default()
}
pub fn max_age(mut self, seconds: i32) -> Self {
self.max_age = Some(seconds);
self
}
pub fn max_uses(mut self, uses: i32) -> Self {
self.max_uses = Some(uses);
self
}
pub fn temporary(mut self, temporary: bool) -> Self {
self.temporary = Some(temporary);
self
}
pub fn unique(mut self, unique: bool) -> Self {
self.unique = Some(unique);
self
}
}
impl HttpClient {
pub async fn get_invite(&self, code: &str) -> Result<Invite, HttpError> {
self.request_no_body(Route::GetInvite {
code: code.to_string(),
})
.await
}
pub async fn accept_invite(&self, code: &str) -> Result<serde_json::Value, HttpError> {
#[derive(Serialize)]
struct Body {}
self.request(
Route::AcceptInvite {
code: code.to_string(),
},
Some(&Body {}),
)
.await
}
pub async fn delete_invite(&self, code: &str) -> Result<(), HttpError> {
self.request_empty(
Route::DeleteInvite {
code: code.to_string(),
},
None::<&()>,
)
.await
}
pub async fn get_channel_invites(
&self,
channel_id: ChannelId,
) -> Result<Vec<Invite>, HttpError> {
self.request_no_body(Route::GetChannelInvites { channel_id })
.await
}
pub async fn create_channel_invite(
&self,
channel_id: ChannelId,
params: &CreateInvite,
) -> Result<Invite, HttpError> {
self.request(Route::CreateChannelInvite { channel_id }, Some(params))
.await
}
pub async fn get_guild_invites(&self, guild_id: GuildId) -> Result<Vec<Invite>, HttpError> {
self.request_no_body(Route::GetGuildInvites { guild_id })
.await
}
}