Merge pull request #110 from SpecificProtagonist/clippy2

Fix clippy::await_holding_refcell_ref false positives
This commit is contained in:
Flori 2023-06-19 16:56:42 +02:00 committed by GitHub
commit 772f451879
11 changed files with 75 additions and 116 deletions

View File

@ -63,7 +63,7 @@ impl Instance {
UserMeta::get_settings(&token, &self.urls.get_api().to_string(), &mut self.limits) UserMeta::get_settings(&token, &self.urls.get_api().to_string(), &mut self.limits)
.await .await
.unwrap(); .unwrap();
let user: UserMeta = UserMeta::new( let user = UserMeta::new(
Rc::new(RefCell::new(self.clone())), Rc::new(RefCell::new(self.clone())),
token.clone(), token.clone(),
cloned_limits, cloned_limits,

View File

@ -10,9 +10,7 @@ use crate::{
impl Channel { impl Channel {
pub async fn get(user: &mut UserMeta, channel_id: &str) -> Result<Channel, ChorusLibError> { pub async fn get(user: &mut UserMeta, channel_id: &str) -> Result<Channel, ChorusLibError> {
let belongs_to = user.belongs_to.borrow_mut(); let url = user.belongs_to.borrow_mut().urls.get_api().to_string();
let url = belongs_to.urls.get_api().to_string();
drop(belongs_to);
let request = Client::new() let request = Client::new()
.get(format!("{}/channels/{}/", url, channel_id)) .get(format!("{}/channels/{}/", url, channel_id))
.bearer_auth(user.token()); .bearer_auth(user.token());
@ -46,15 +44,13 @@ impl Channel {
/// ///
/// An `Option` that contains an `ChorusLibError` if an error occurred during the request, or `None` if the request was successful. /// An `Option` that contains an `ChorusLibError` if an error occurred during the request, or `None` if the request was successful.
pub async fn delete(self, user: &mut UserMeta) -> Option<ChorusLibError> { pub async fn delete(self, user: &mut UserMeta) -> Option<ChorusLibError> {
let belongs_to = user.belongs_to.borrow_mut();
let request = Client::new() let request = Client::new()
.delete(format!( .delete(format!(
"{}/channels/{}/", "{}/channels/{}/",
belongs_to.urls.get_api(), user.belongs_to.borrow_mut().urls.get_api(),
self.id.to_string() self.id.to_string()
)) ))
.bearer_auth(user.token()); .bearer_auth(user.token());
drop(belongs_to);
let response = let response =
common::handle_request(request, user, crate::api::limits::LimitType::Channel).await; common::handle_request(request, user, crate::api::limits::LimitType::Channel).await;
response.err() response.err()
@ -79,16 +75,14 @@ impl Channel {
channel_id: &str, channel_id: &str,
user: &mut UserMeta, user: &mut UserMeta,
) -> Result<Channel, ChorusLibError> { ) -> Result<Channel, ChorusLibError> {
let belongs_to = user.belongs_to.borrow();
let request = Client::new() let request = Client::new()
.patch(format!( .patch(format!(
"{}/channels/{}/", "{}/channels/{}/",
belongs_to.urls.get_api(), user.belongs_to.borrow().urls.get_api(),
channel_id channel_id
)) ))
.bearer_auth(user.token()) .bearer_auth(user.token())
.body(to_string(&modify_data).unwrap()); .body(to_string(&modify_data).unwrap());
drop(belongs_to);
let channel = common::deserialize_response::<Channel>( let channel = common::deserialize_response::<Channel>(
request, request,
user, user,

View File

@ -25,9 +25,7 @@ impl Message {
message: &mut MessageSendSchema, message: &mut MessageSendSchema,
files: Option<Vec<PartialDiscordFileAttachment>>, files: Option<Vec<PartialDiscordFileAttachment>>,
) -> Result<Message, crate::errors::ChorusLibError> { ) -> Result<Message, crate::errors::ChorusLibError> {
let belongs_to = user.belongs_to.borrow(); let url_api = user.belongs_to.borrow().urls.get_api().to_string();
let url_api = belongs_to.urls.get_api().to_string();
drop(belongs_to);
if files.is_none() { if files.is_none() {
let request = Client::new() let request = Client::new()

View File

@ -25,14 +25,14 @@ impl types::Channel {
channel_id: &str, channel_id: &str,
overwrite: PermissionOverwrite, overwrite: PermissionOverwrite,
) -> Option<ChorusLibError> { ) -> Option<ChorusLibError> {
let belongs_to = user.belongs_to.borrow_mut(); let url = {
let url = format!( format!(
"{}/channels/{}/permissions/{}", "{}/channels/{}/permissions/{}",
belongs_to.urls.get_api(), user.belongs_to.borrow_mut().urls.get_api(),
channel_id, channel_id,
overwrite.id overwrite.id
); )
drop(belongs_to); };
let body = match to_string(&overwrite) { let body = match to_string(&overwrite) {
Ok(string) => string, Ok(string) => string,
Err(e) => { Err(e) => {
@ -66,14 +66,12 @@ impl types::Channel {
channel_id: &str, channel_id: &str,
overwrite_id: &str, overwrite_id: &str,
) -> Option<ChorusLibError> { ) -> Option<ChorusLibError> {
let belongs_to = user.belongs_to.borrow_mut();
let url = format!( let url = format!(
"{}/channels/{}/permissions/{}", "{}/channels/{}/permissions/{}",
belongs_to.urls.get_api(), user.belongs_to.borrow_mut().urls.get_api(),
channel_id, channel_id,
overwrite_id overwrite_id
); );
drop(belongs_to);
let request = Client::new().delete(url).bearer_auth(user.token()); let request = Client::new().delete(url).bearer_auth(user.token());
match handle_request(request, user, crate::api::limits::LimitType::Channel).await { match handle_request(request, user, crate::api::limits::LimitType::Channel).await {
Ok(_) => None, Ok(_) => None,

View File

@ -31,14 +31,12 @@ impl ReactionMeta {
See [https://discord.com/developers/docs/resources/channel#delete-all-reactions](https://discord.com/developers/docs/resources/channel#delete-all-reactions) See [https://discord.com/developers/docs/resources/channel#delete-all-reactions](https://discord.com/developers/docs/resources/channel#delete-all-reactions)
*/ */
pub async fn delete_all(&self, user: &mut UserMeta) -> Option<ChorusLibError> { pub async fn delete_all(&self, user: &mut UserMeta) -> Option<ChorusLibError> {
let belongs_to = user.belongs_to.borrow();
let url = format!( let url = format!(
"{}/channels/{}/messages/{}/reactions/", "{}/channels/{}/messages/{}/reactions/",
belongs_to.urls.get_api(), user.belongs_to.borrow().urls.get_api(),
self.channel_id, self.channel_id,
self.message_id self.message_id
); );
drop(belongs_to);
let request = Client::new().delete(url).bearer_auth(user.token()); let request = Client::new().delete(url).bearer_auth(user.token());
match handle_request(request, user, crate::api::limits::LimitType::Channel).await { match handle_request(request, user, crate::api::limits::LimitType::Channel).await {
Ok(_) => None, Ok(_) => None,
@ -64,15 +62,13 @@ impl ReactionMeta {
See [https://discord.com/developers/docs/resources/channel#get-reactions](https://discord.com/developers/docs/resources/channel#get-reactions) See [https://discord.com/developers/docs/resources/channel#get-reactions](https://discord.com/developers/docs/resources/channel#get-reactions)
*/ */
pub async fn get(&self, emoji: &str, user: &mut UserMeta) -> Option<ChorusLibError> { pub async fn get(&self, emoji: &str, user: &mut UserMeta) -> Option<ChorusLibError> {
let belongs_to = user.belongs_to.borrow();
let url = format!( let url = format!(
"{}/channels/{}/messages/{}/reactions/{}/", "{}/channels/{}/messages/{}/reactions/{}/",
belongs_to.urls.get_api(), user.belongs_to.borrow().urls.get_api(),
self.channel_id, self.channel_id,
self.message_id, self.message_id,
emoji emoji
); );
drop(belongs_to);
let request = Client::new().get(url).bearer_auth(user.token()); let request = Client::new().get(url).bearer_auth(user.token());
match handle_request(request, user, crate::api::limits::LimitType::Channel).await { match handle_request(request, user, crate::api::limits::LimitType::Channel).await {
Ok(_) => None, Ok(_) => None,
@ -100,15 +96,13 @@ impl ReactionMeta {
See [https://discord.com/developers/docs/resources/channel#delete-all-reactions-for-emoji](https://discord.com/developers/docs/resources/channel#delete-all-reactions-for-emoji) See [https://discord.com/developers/docs/resources/channel#delete-all-reactions-for-emoji](https://discord.com/developers/docs/resources/channel#delete-all-reactions-for-emoji)
*/ */
pub async fn delete_emoji(&self, emoji: &str, user: &mut UserMeta) -> Option<ChorusLibError> { pub async fn delete_emoji(&self, emoji: &str, user: &mut UserMeta) -> Option<ChorusLibError> {
let belongs_to = user.belongs_to.borrow();
let url = format!( let url = format!(
"{}/channels/{}/messages/{}/reactions/{}/", "{}/channels/{}/messages/{}/reactions/{}/",
belongs_to.urls.get_api(), user.belongs_to.borrow().urls.get_api(),
self.channel_id, self.channel_id,
self.message_id, self.message_id,
emoji emoji
); );
drop(belongs_to);
let request = Client::new().delete(url).bearer_auth(user.token()); let request = Client::new().delete(url).bearer_auth(user.token());
match handle_request(request, user, crate::api::limits::LimitType::Channel).await { match handle_request(request, user, crate::api::limits::LimitType::Channel).await {
Ok(_) => None, Ok(_) => None,
@ -140,15 +134,13 @@ impl ReactionMeta {
See [https://discord.com/developers/docs/resources/channel#create-reaction](https://discord.com/developers/docs/resources/channel#create-reaction) See [https://discord.com/developers/docs/resources/channel#create-reaction](https://discord.com/developers/docs/resources/channel#create-reaction)
*/ */
pub async fn create(&self, emoji: &str, user: &mut UserMeta) -> Option<ChorusLibError> { pub async fn create(&self, emoji: &str, user: &mut UserMeta) -> Option<ChorusLibError> {
let belongs_to = user.belongs_to.borrow();
let url = format!( let url = format!(
"{}/channels/{}/messages/{}/reactions/{}/@me/", "{}/channels/{}/messages/{}/reactions/{}/@me/",
belongs_to.urls.get_api(), user.belongs_to.borrow().urls.get_api(),
self.channel_id, self.channel_id,
self.message_id, self.message_id,
emoji emoji
); );
drop(belongs_to);
let request = Client::new().put(url).bearer_auth(user.token()); let request = Client::new().put(url).bearer_auth(user.token());
handle_request_as_option(request, user, crate::api::limits::LimitType::Channel).await handle_request_as_option(request, user, crate::api::limits::LimitType::Channel).await
} }
@ -171,15 +163,13 @@ impl ReactionMeta {
See [https://discord.com/developers/docs/resources/channel#delete-own-reaction](https://discord.com/developers/docs/resources/channel#delete-own-reaction) See [https://discord.com/developers/docs/resources/channel#delete-own-reaction](https://discord.com/developers/docs/resources/channel#delete-own-reaction)
*/ */
pub async fn remove(&self, emoji: &str, user: &mut UserMeta) -> Option<ChorusLibError> { pub async fn remove(&self, emoji: &str, user: &mut UserMeta) -> Option<ChorusLibError> {
let belongs_to = user.belongs_to.borrow();
let url = format!( let url = format!(
"{}/channels/{}/messages/{}/reactions/{}/@me/", "{}/channels/{}/messages/{}/reactions/{}/@me/",
belongs_to.urls.get_api(), user.belongs_to.borrow().urls.get_api(),
self.channel_id, self.channel_id,
self.message_id, self.message_id,
emoji emoji
); );
drop(belongs_to);
let request = Client::new().delete(url).bearer_auth(user.token()); let request = Client::new().delete(url).bearer_auth(user.token());
handle_request_as_option(request, user, crate::api::limits::LimitType::Channel).await handle_request_as_option(request, user, crate::api::limits::LimitType::Channel).await
} }
@ -210,16 +200,14 @@ impl ReactionMeta {
emoji: &str, emoji: &str,
user: &mut UserMeta, user: &mut UserMeta,
) -> Option<ChorusLibError> { ) -> Option<ChorusLibError> {
let belongs_to = user.belongs_to.borrow();
let url = format!( let url = format!(
"{}/channels/{}/messages/{}/reactions/{}/{}", "{}/channels/{}/messages/{}/reactions/{}/{}",
belongs_to.urls.get_api(), user.belongs_to.borrow().urls.get_api(),
self.channel_id, self.channel_id,
self.message_id, self.message_id,
emoji, emoji,
user_id user_id
); );
drop(belongs_to);
let request = Client::new().delete(url).bearer_auth(user.token()); let request = Client::new().delete(url).bearer_auth(user.token());
handle_request_as_option(request, user, crate::api::limits::LimitType::Channel).await handle_request_as_option(request, user, crate::api::limits::LimitType::Channel).await
} }

View File

@ -12,11 +12,10 @@ pub async fn handle_request(
user: &mut UserMeta, user: &mut UserMeta,
limit_type: LimitType, limit_type: LimitType,
) -> Result<reqwest::Response, crate::errors::ChorusLibError> { ) -> Result<reqwest::Response, crate::errors::ChorusLibError> {
let mut belongs_to = user.belongs_to.borrow_mut();
LimitedRequester::send_request( LimitedRequester::send_request(
request, request,
limit_type, limit_type,
&mut belongs_to.limits, &mut user.belongs_to.borrow_mut().limits,
&mut user.limits, &mut user.limits,
) )
.await .await

View File

@ -32,9 +32,7 @@ impl Guild {
user: &mut UserMeta, user: &mut UserMeta,
guild_create_schema: GuildCreateSchema, guild_create_schema: GuildCreateSchema,
) -> Result<Guild, ChorusLibError> { ) -> Result<Guild, ChorusLibError> {
let belongs_to = user.belongs_to.borrow(); let url = format!("{}/guilds/", user.belongs_to.borrow().urls.get_api());
let url = format!("{}/guilds/", belongs_to.urls.get_api());
drop(belongs_to);
let request = reqwest::Client::new() let request = reqwest::Client::new()
.post(url.clone()) .post(url.clone())
.bearer_auth(user.token.clone()) .bearer_auth(user.token.clone())
@ -67,9 +65,11 @@ impl Guild {
/// } /// }
/// ``` /// ```
pub async fn delete(user: &mut UserMeta, guild_id: &str) -> Option<ChorusLibError> { pub async fn delete(user: &mut UserMeta, guild_id: &str) -> Option<ChorusLibError> {
let belongs_to = user.belongs_to.borrow(); let url = format!(
let url = format!("{}/guilds/{}/delete/", belongs_to.urls.get_api(), guild_id); "{}/guilds/{}/delete/",
drop(belongs_to); user.belongs_to.borrow().urls.get_api(),
guild_id
);
let request = reqwest::Client::new() let request = reqwest::Client::new()
.post(url.clone()) .post(url.clone())
.bearer_auth(user.token.clone()); .bearer_auth(user.token.clone());
@ -116,15 +116,13 @@ impl Guild {
/// * `limits_instance` - A mutable reference to a `Limits` struct containing the instance's rate limits. /// * `limits_instance` - A mutable reference to a `Limits` struct containing the instance's rate limits.
/// ///
pub async fn channels(&self, user: &mut UserMeta) -> Result<Vec<Channel>, ChorusLibError> { pub async fn channels(&self, user: &mut UserMeta) -> Result<Vec<Channel>, ChorusLibError> {
let belongs_to = user.belongs_to.borrow();
let request = Client::new() let request = Client::new()
.get(format!( .get(format!(
"{}/guilds/{}/channels/", "{}/guilds/{}/channels/",
belongs_to.urls.get_api(), user.belongs_to.borrow().urls.get_api(),
self.id.to_string() self.id.to_string()
)) ))
.bearer_auth(user.token()); .bearer_auth(user.token());
drop(belongs_to);
let result = handle_request(request, user, crate::api::limits::LimitType::Channel) let result = handle_request(request, user, crate::api::limits::LimitType::Channel)
.await .await
.unwrap(); .unwrap();

View File

@ -24,14 +24,12 @@ impl types::GuildMember {
guild_id: &str, guild_id: &str,
member_id: &str, member_id: &str,
) -> Result<types::GuildMember, ChorusLibError> { ) -> Result<types::GuildMember, ChorusLibError> {
let belongs_to = user.belongs_to.borrow();
let url = format!( let url = format!(
"{}/guilds/{}/members/{}/", "{}/guilds/{}/members/{}/",
belongs_to.urls.get_api(), user.belongs_to.borrow().urls.get_api(),
guild_id, guild_id,
member_id member_id
); );
drop(belongs_to);
let request = Client::new().get(url).bearer_auth(user.token()); let request = Client::new().get(url).bearer_auth(user.token());
deserialize_response::<types::GuildMember>( deserialize_response::<types::GuildMember>(
request, request,
@ -59,15 +57,13 @@ impl types::GuildMember {
member_id: &str, member_id: &str,
role_id: &str, role_id: &str,
) -> Option<ChorusLibError> { ) -> Option<ChorusLibError> {
let belongs_to = user.belongs_to.borrow();
let url = format!( let url = format!(
"{}/guilds/{}/members/{}/roles/{}/", "{}/guilds/{}/members/{}/roles/{}/",
belongs_to.urls.get_api(), user.belongs_to.borrow().urls.get_api(),
guild_id, guild_id,
member_id, member_id,
role_id role_id
); );
drop(belongs_to);
let request = Client::new().put(url).bearer_auth(user.token()); let request = Client::new().put(url).bearer_auth(user.token());
handle_request_as_option(request, user, crate::api::limits::LimitType::Guild).await handle_request_as_option(request, user, crate::api::limits::LimitType::Guild).await
} }
@ -90,15 +86,13 @@ impl types::GuildMember {
member_id: &str, member_id: &str,
role_id: &str, role_id: &str,
) -> Option<crate::errors::ChorusLibError> { ) -> Option<crate::errors::ChorusLibError> {
let belongs_to = user.belongs_to.borrow();
let url = format!( let url = format!(
"{}/guilds/{}/members/{}/roles/{}/", "{}/guilds/{}/members/{}/roles/{}/",
belongs_to.urls.get_api(), user.belongs_to.borrow().urls.get_api(),
guild_id, guild_id,
member_id, member_id,
role_id role_id
); );
drop(belongs_to);
let request = Client::new().delete(url).bearer_auth(user.token()); let request = Client::new().delete(url).bearer_auth(user.token());
handle_request_as_option(request, user, crate::api::limits::LimitType::Guild).await handle_request_as_option(request, user, crate::api::limits::LimitType::Guild).await
} }

View File

@ -27,9 +27,11 @@ impl types::RoleObject {
user: &mut UserMeta, user: &mut UserMeta,
guild_id: &str, guild_id: &str,
) -> Result<Option<Vec<RoleObject>>, ChorusLibError> { ) -> Result<Option<Vec<RoleObject>>, ChorusLibError> {
let belongs_to = user.belongs_to.borrow(); let url = format!(
let url = format!("{}/guilds/{}/roles/", belongs_to.urls.get_api(), guild_id); "{}/guilds/{}/roles/",
drop(belongs_to); user.belongs_to.borrow().urls.get_api(),
guild_id
);
let request = Client::new().get(url).bearer_auth(user.token()); let request = Client::new().get(url).bearer_auth(user.token());
let roles = deserialize_response::<Vec<RoleObject>>( let roles = deserialize_response::<Vec<RoleObject>>(
request, request,
@ -64,14 +66,12 @@ impl types::RoleObject {
guild_id: &str, guild_id: &str,
role_id: &str, role_id: &str,
) -> Result<RoleObject, ChorusLibError> { ) -> Result<RoleObject, ChorusLibError> {
let belongs_to = user.belongs_to.borrow();
let url = format!( let url = format!(
"{}/guilds/{}/roles/{}/", "{}/guilds/{}/roles/{}/",
belongs_to.urls.get_api(), user.belongs_to.borrow().urls.get_api(),
guild_id, guild_id,
role_id role_id
); );
drop(belongs_to);
let request = Client::new().get(url).bearer_auth(user.token()); let request = Client::new().get(url).bearer_auth(user.token());
deserialize_response(request, user, crate::api::limits::LimitType::Guild).await deserialize_response(request, user, crate::api::limits::LimitType::Guild).await
} }
@ -96,17 +96,16 @@ impl types::RoleObject {
guild_id: &str, guild_id: &str,
role_create_schema: RoleCreateModifySchema, role_create_schema: RoleCreateModifySchema,
) -> Result<RoleObject, ChorusLibError> { ) -> Result<RoleObject, ChorusLibError> {
let belongs_to = user.belongs_to.borrow(); let url = format!(
let url = format!("{}/guilds/{}/roles/", belongs_to.urls.get_api(), guild_id); "{}/guilds/{}/roles/",
drop(belongs_to); user.belongs_to.borrow().urls.get_api(),
let body = match to_string::<RoleCreateModifySchema>(&role_create_schema) { guild_id
Ok(string) => string, );
Err(e) => { let body = to_string::<RoleCreateModifySchema>(&role_create_schema).map_err(|e| {
return Err(ChorusLibError::FormCreationError { ChorusLibError::FormCreationError {
error: e.to_string(), error: e.to_string(),
});
} }
}; })?;
let request = Client::new().post(url).bearer_auth(user.token()).body(body); let request = Client::new().post(url).bearer_auth(user.token()).body(body);
deserialize_response(request, user, crate::api::limits::LimitType::Guild).await deserialize_response(request, user, crate::api::limits::LimitType::Guild).await
} }
@ -131,17 +130,16 @@ impl types::RoleObject {
guild_id: &str, guild_id: &str,
role_position_update_schema: types::RolePositionUpdateSchema, role_position_update_schema: types::RolePositionUpdateSchema,
) -> Result<RoleObject, ChorusLibError> { ) -> Result<RoleObject, ChorusLibError> {
let belongs_to = user.belongs_to.borrow(); let url = format!(
let url = format!("{}/guilds/{}/roles/", belongs_to.urls.get_api(), guild_id); "{}/guilds/{}/roles/",
let body = match to_string(&role_position_update_schema) { user.belongs_to.borrow().urls.get_api(),
Ok(body) => body, guild_id
Err(e) => { );
return Err(ChorusLibError::FormCreationError { let body = to_string(&role_position_update_schema).map_err(|e| {
ChorusLibError::FormCreationError {
error: e.to_string(), error: e.to_string(),
});
} }
}; })?;
drop(belongs_to);
let request = Client::new() let request = Client::new()
.patch(url) .patch(url)
.bearer_auth(user.token()) .bearer_auth(user.token())
@ -172,22 +170,17 @@ impl types::RoleObject {
role_id: &str, role_id: &str,
role_create_schema: RoleCreateModifySchema, role_create_schema: RoleCreateModifySchema,
) -> Result<RoleObject, ChorusLibError> { ) -> Result<RoleObject, ChorusLibError> {
let belongs_to = user.belongs_to.borrow();
let url = format!( let url = format!(
"{}/guilds/{}/roles/{}", "{}/guilds/{}/roles/{}",
belongs_to.urls.get_api(), user.belongs_to.borrow().urls.get_api(),
guild_id, guild_id,
role_id role_id
); );
drop(belongs_to); let body = to_string::<RoleCreateModifySchema>(&role_create_schema).map_err(|e| {
let body = match to_string::<RoleCreateModifySchema>(&role_create_schema) { ChorusLibError::FormCreationError {
Ok(string) => string,
Err(e) => {
return Err(ChorusLibError::FormCreationError {
error: e.to_string(), error: e.to_string(),
});
} }
}; })?;
let request = Client::new() let request = Client::new()
.patch(url) .patch(url)
.bearer_auth(user.token()) .bearer_auth(user.token())

View File

@ -21,13 +21,11 @@ impl UserMeta {
&mut self, &mut self,
user_id: &str, user_id: &str,
) -> Result<Vec<types::PublicUser>, ChorusLibError> { ) -> Result<Vec<types::PublicUser>, ChorusLibError> {
let belongs_to = self.belongs_to.borrow();
let url = format!( let url = format!(
"{}/users/{}/relationships/", "{}/users/{}/relationships/",
belongs_to.urls.get_api(), self.belongs_to.borrow().urls.get_api(),
user_id user_id
); );
drop(belongs_to);
let request = Client::new().get(url).bearer_auth(self.token()); let request = Client::new().get(url).bearer_auth(self.token());
deserialize_response::<Vec<types::PublicUser>>( deserialize_response::<Vec<types::PublicUser>>(
request, request,
@ -42,9 +40,10 @@ impl UserMeta {
/// # Returns /// # Returns
/// This function returns a [`Result<Vec<types::Relationship>, ChorusLibError>`]. /// This function returns a [`Result<Vec<types::Relationship>, ChorusLibError>`].
pub async fn get_relationships(&mut self) -> Result<Vec<types::Relationship>, ChorusLibError> { pub async fn get_relationships(&mut self) -> Result<Vec<types::Relationship>, ChorusLibError> {
let belongs_to = self.belongs_to.borrow(); let url = format!(
let url = format!("{}/users/@me/relationships/", belongs_to.urls.get_api(),); "{}/users/@me/relationships/",
drop(belongs_to); self.belongs_to.borrow().urls.get_api()
);
let request = Client::new().get(url).bearer_auth(self.token()); let request = Client::new().get(url).bearer_auth(self.token());
deserialize_response::<Vec<types::Relationship>>( deserialize_response::<Vec<types::Relationship>>(
request, request,
@ -66,9 +65,10 @@ impl UserMeta {
&mut self, &mut self,
schema: types::FriendRequestSendSchema, schema: types::FriendRequestSendSchema,
) -> Option<ChorusLibError> { ) -> Option<ChorusLibError> {
let belongs_to = self.belongs_to.borrow(); let url = format!(
let url = format!("{}/users/@me/relationships/", belongs_to.urls.get_api()); "{}/users/@me/relationships/",
drop(belongs_to); self.belongs_to.borrow().urls.get_api()
);
let body = to_string(&schema).unwrap(); let body = to_string(&schema).unwrap();
let request = Client::new().post(url).bearer_auth(self.token()).body(body); let request = Client::new().post(url).bearer_auth(self.token()).body(body);
handle_request_as_option(request, self, crate::api::limits::LimitType::Global).await handle_request_as_option(request, self, crate::api::limits::LimitType::Global).await
@ -93,9 +93,7 @@ impl UserMeta {
user_id: &str, user_id: &str,
relationship_type: RelationshipType, relationship_type: RelationshipType,
) -> Option<ChorusLibError> { ) -> Option<ChorusLibError> {
let belongs_to = self.belongs_to.borrow(); let api_url = self.belongs_to.borrow().urls.api.clone();
let api_url = belongs_to.urls.api.clone();
drop(belongs_to);
match relationship_type { match relationship_type {
RelationshipType::None => { RelationshipType::None => {
let request = Client::new() let request = Client::new()
@ -140,13 +138,11 @@ impl UserMeta {
/// # Returns /// # Returns
/// This function returns an [`Option`] that holds a [`ChorusLibError`] if the request fails. /// This function returns an [`Option`] that holds a [`ChorusLibError`] if the request fails.
pub async fn remove_relationship(&mut self, user_id: &str) -> Option<ChorusLibError> { pub async fn remove_relationship(&mut self, user_id: &str) -> Option<ChorusLibError> {
let belongs_to = self.belongs_to.borrow();
let url = format!( let url = format!(
"{}/users/@me/relationships/{}/", "{}/users/@me/relationships/{}/",
belongs_to.urls.get_api(), self.belongs_to.borrow().urls.get_api(),
user_id user_id
); );
drop(belongs_to);
let request = Client::new().post(url).bearer_auth(self.token()); let request = Client::new().post(url).bearer_auth(self.token());
handle_request_as_option(request, self, crate::api::limits::LimitType::Global).await handle_request_as_option(request, self, crate::api::limits::LimitType::Global).await
} }

View File

@ -76,11 +76,12 @@ impl UserMeta {
/// ///
/// Returns `None` if the user was successfully deleted, or an `ChorusLibError` if an error occurred. /// Returns `None` if the user was successfully deleted, or an `ChorusLibError` if an error occurred.
pub async fn delete(mut self) -> Option<ChorusLibError> { pub async fn delete(mut self) -> Option<ChorusLibError> {
let belongs_to = self.belongs_to.borrow();
let request = Client::new() let request = Client::new()
.post(format!("{}/users/@me/delete/", belongs_to.urls.get_api())) .post(format!(
"{}/users/@me/delete/",
self.belongs_to.borrow().urls.get_api()
))
.bearer_auth(self.token()); .bearer_auth(self.token());
drop(belongs_to);
handle_request_as_option(request, &mut self, crate::api::limits::LimitType::Ip).await handle_request_as_option(request, &mut self, crate::api::limits::LimitType::Ip).await
} }
} }