use reqwest::Client;
use serde_json::to_string;
use crate::errors::ChorusResult;
use crate::instance::ChorusUser;
use crate::ratelimiter::ChorusRequest;
use crate::types::{GetUserGuildsSchema, Guild, GuildLeaveSchema, LimitType, Snowflake};
impl ChorusUser {
pub async fn leave_guild(
&mut self,
guild_id: &Snowflake,
lurking: Option<bool>,
) -> ChorusResult<()> {
ChorusRequest {
request: Client::new()
.delete(format!(
"{}/users/@me/guilds/{}",
self.belongs_to.read().unwrap().urls.api,
guild_id
))
.json(&GuildLeaveSchema { lurking }),
limit_type: LimitType::Guild(*guild_id),
}
.send_and_handle_as_result(self)
.await
}
pub async fn get_guilds(
&mut self,
query: Option<GetUserGuildsSchema>,
) -> ChorusResult<Vec<Guild>> {
let query_parameters = {
if let Some(query_some) = query {
query_some.to_query()
} else {
Vec::new()
}
};
let url = format!(
"{}/users/@me/guilds",
self.belongs_to.read().unwrap().urls.api,
);
let chorus_request = ChorusRequest {
request: Client::new().get(url).query(&query_parameters),
limit_type: LimitType::Global,
}
.with_headers_for(self);
chorus_request
.send_and_deserialize_response::<Vec<Guild>>(self)
.await
}
pub async fn get_join_request_guilds(&mut self) -> ChorusResult<Vec<Guild>> {
let url = format!(
"{}/users/@me/join-request-guilds",
self.belongs_to.read().unwrap().urls.api,
);
let chorus_request = ChorusRequest {
request: Client::new().get(url),
limit_type: LimitType::Global,
}
.with_headers_for(self);
chorus_request
.send_and_deserialize_response::<Vec<Guild>>(self)
.await
}
}