diff --git a/src/api/auth/register.rs b/src/api/auth/register.rs index 80485eb..0698704 100644 --- a/src/api/auth/register.rs +++ b/src/api/auth/register.rs @@ -63,7 +63,7 @@ impl Instance { UserMeta::get_settings(&token, &self.urls.get_api().to_string(), &mut self.limits) .await .unwrap(); - let user: UserMeta = UserMeta::new( + let user = UserMeta::new( Rc::new(RefCell::new(self.clone())), token.clone(), cloned_limits, diff --git a/src/api/channels/channels.rs b/src/api/channels/channels.rs index 391f5f1..7c4c8aa 100644 --- a/src/api/channels/channels.rs +++ b/src/api/channels/channels.rs @@ -10,9 +10,7 @@ use crate::{ impl Channel { pub async fn get(user: &mut UserMeta, channel_id: &str) -> Result { - let belongs_to = user.belongs_to.borrow_mut(); - let url = belongs_to.urls.get_api().to_string(); - drop(belongs_to); + let url = user.belongs_to.borrow_mut().urls.get_api().to_string(); let request = Client::new() .get(format!("{}/channels/{}/", url, channel_id)) .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. pub async fn delete(self, user: &mut UserMeta) -> Option { - let belongs_to = user.belongs_to.borrow_mut(); let request = Client::new() .delete(format!( "{}/channels/{}/", - belongs_to.urls.get_api(), + user.belongs_to.borrow_mut().urls.get_api(), self.id.to_string() )) .bearer_auth(user.token()); - drop(belongs_to); let response = common::handle_request(request, user, crate::api::limits::LimitType::Channel).await; response.err() @@ -79,16 +75,14 @@ impl Channel { channel_id: &str, user: &mut UserMeta, ) -> Result { - let belongs_to = user.belongs_to.borrow(); let request = Client::new() .patch(format!( "{}/channels/{}/", - belongs_to.urls.get_api(), + user.belongs_to.borrow().urls.get_api(), channel_id )) .bearer_auth(user.token()) .body(to_string(&modify_data).unwrap()); - drop(belongs_to); let channel = common::deserialize_response::( request, user, diff --git a/src/api/channels/messages.rs b/src/api/channels/messages.rs index a20570f..281f8ff 100644 --- a/src/api/channels/messages.rs +++ b/src/api/channels/messages.rs @@ -25,9 +25,7 @@ impl Message { message: &mut MessageSendSchema, files: Option>, ) -> Result { - let belongs_to = user.belongs_to.borrow(); - let url_api = belongs_to.urls.get_api().to_string(); - drop(belongs_to); + let url_api = user.belongs_to.borrow().urls.get_api().to_string(); if files.is_none() { let request = Client::new() diff --git a/src/api/channels/permissions.rs b/src/api/channels/permissions.rs index 120117b..cd12f30 100644 --- a/src/api/channels/permissions.rs +++ b/src/api/channels/permissions.rs @@ -25,14 +25,14 @@ impl types::Channel { channel_id: &str, overwrite: PermissionOverwrite, ) -> Option { - let belongs_to = user.belongs_to.borrow_mut(); - let url = format!( - "{}/channels/{}/permissions/{}", - belongs_to.urls.get_api(), - channel_id, - overwrite.id - ); - drop(belongs_to); + let url = { + format!( + "{}/channels/{}/permissions/{}", + user.belongs_to.borrow_mut().urls.get_api(), + channel_id, + overwrite.id + ) + }; let body = match to_string(&overwrite) { Ok(string) => string, Err(e) => { @@ -66,14 +66,12 @@ impl types::Channel { channel_id: &str, overwrite_id: &str, ) -> Option { - let belongs_to = user.belongs_to.borrow_mut(); let url = format!( "{}/channels/{}/permissions/{}", - belongs_to.urls.get_api(), + user.belongs_to.borrow_mut().urls.get_api(), channel_id, overwrite_id ); - drop(belongs_to); let request = Client::new().delete(url).bearer_auth(user.token()); match handle_request(request, user, crate::api::limits::LimitType::Channel).await { Ok(_) => None, diff --git a/src/api/channels/reactions.rs b/src/api/channels/reactions.rs index ea00219..0f54002 100644 --- a/src/api/channels/reactions.rs +++ b/src/api/channels/reactions.rs @@ -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) */ pub async fn delete_all(&self, user: &mut UserMeta) -> Option { - let belongs_to = user.belongs_to.borrow(); let url = format!( "{}/channels/{}/messages/{}/reactions/", - belongs_to.urls.get_api(), + user.belongs_to.borrow().urls.get_api(), self.channel_id, self.message_id ); - drop(belongs_to); let request = Client::new().delete(url).bearer_auth(user.token()); match handle_request(request, user, crate::api::limits::LimitType::Channel).await { 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) */ pub async fn get(&self, emoji: &str, user: &mut UserMeta) -> Option { - let belongs_to = user.belongs_to.borrow(); let url = format!( "{}/channels/{}/messages/{}/reactions/{}/", - belongs_to.urls.get_api(), + user.belongs_to.borrow().urls.get_api(), self.channel_id, self.message_id, emoji ); - drop(belongs_to); let request = Client::new().get(url).bearer_auth(user.token()); match handle_request(request, user, crate::api::limits::LimitType::Channel).await { 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) */ pub async fn delete_emoji(&self, emoji: &str, user: &mut UserMeta) -> Option { - let belongs_to = user.belongs_to.borrow(); let url = format!( "{}/channels/{}/messages/{}/reactions/{}/", - belongs_to.urls.get_api(), + user.belongs_to.borrow().urls.get_api(), self.channel_id, self.message_id, emoji ); - drop(belongs_to); let request = Client::new().delete(url).bearer_auth(user.token()); match handle_request(request, user, crate::api::limits::LimitType::Channel).await { 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) */ pub async fn create(&self, emoji: &str, user: &mut UserMeta) -> Option { - let belongs_to = user.belongs_to.borrow(); let url = format!( "{}/channels/{}/messages/{}/reactions/{}/@me/", - belongs_to.urls.get_api(), + user.belongs_to.borrow().urls.get_api(), self.channel_id, self.message_id, emoji ); - drop(belongs_to); let request = Client::new().put(url).bearer_auth(user.token()); 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) */ pub async fn remove(&self, emoji: &str, user: &mut UserMeta) -> Option { - let belongs_to = user.belongs_to.borrow(); let url = format!( "{}/channels/{}/messages/{}/reactions/{}/@me/", - belongs_to.urls.get_api(), + user.belongs_to.borrow().urls.get_api(), self.channel_id, self.message_id, emoji ); - drop(belongs_to); let request = Client::new().delete(url).bearer_auth(user.token()); handle_request_as_option(request, user, crate::api::limits::LimitType::Channel).await } @@ -210,16 +200,14 @@ impl ReactionMeta { emoji: &str, user: &mut UserMeta, ) -> Option { - let belongs_to = user.belongs_to.borrow(); let url = format!( "{}/channels/{}/messages/{}/reactions/{}/{}", - belongs_to.urls.get_api(), + user.belongs_to.borrow().urls.get_api(), self.channel_id, self.message_id, emoji, user_id ); - drop(belongs_to); let request = Client::new().delete(url).bearer_auth(user.token()); handle_request_as_option(request, user, crate::api::limits::LimitType::Channel).await } diff --git a/src/api/common.rs b/src/api/common.rs index 60fd263..cecec5a 100644 --- a/src/api/common.rs +++ b/src/api/common.rs @@ -12,11 +12,10 @@ pub async fn handle_request( user: &mut UserMeta, limit_type: LimitType, ) -> Result { - let mut belongs_to = user.belongs_to.borrow_mut(); LimitedRequester::send_request( request, limit_type, - &mut belongs_to.limits, + &mut user.belongs_to.borrow_mut().limits, &mut user.limits, ) .await diff --git a/src/api/guilds/guilds.rs b/src/api/guilds/guilds.rs index 8259c0e..6fea804 100644 --- a/src/api/guilds/guilds.rs +++ b/src/api/guilds/guilds.rs @@ -32,9 +32,7 @@ impl Guild { user: &mut UserMeta, guild_create_schema: GuildCreateSchema, ) -> Result { - let belongs_to = user.belongs_to.borrow(); - let url = format!("{}/guilds/", belongs_to.urls.get_api()); - drop(belongs_to); + let url = format!("{}/guilds/", user.belongs_to.borrow().urls.get_api()); let request = reqwest::Client::new() .post(url.clone()) .bearer_auth(user.token.clone()) @@ -67,9 +65,11 @@ impl Guild { /// } /// ``` pub async fn delete(user: &mut UserMeta, guild_id: &str) -> Option { - let belongs_to = user.belongs_to.borrow(); - let url = format!("{}/guilds/{}/delete/", belongs_to.urls.get_api(), guild_id); - drop(belongs_to); + let url = format!( + "{}/guilds/{}/delete/", + user.belongs_to.borrow().urls.get_api(), + guild_id + ); let request = reqwest::Client::new() .post(url.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. /// pub async fn channels(&self, user: &mut UserMeta) -> Result, ChorusLibError> { - let belongs_to = user.belongs_to.borrow(); let request = Client::new() .get(format!( "{}/guilds/{}/channels/", - belongs_to.urls.get_api(), + user.belongs_to.borrow().urls.get_api(), self.id.to_string() )) .bearer_auth(user.token()); - drop(belongs_to); let result = handle_request(request, user, crate::api::limits::LimitType::Channel) .await .unwrap(); diff --git a/src/api/guilds/member.rs b/src/api/guilds/member.rs index 8a18178..4529073 100644 --- a/src/api/guilds/member.rs +++ b/src/api/guilds/member.rs @@ -24,14 +24,12 @@ impl types::GuildMember { guild_id: &str, member_id: &str, ) -> Result { - let belongs_to = user.belongs_to.borrow(); let url = format!( "{}/guilds/{}/members/{}/", - belongs_to.urls.get_api(), + user.belongs_to.borrow().urls.get_api(), guild_id, member_id ); - drop(belongs_to); let request = Client::new().get(url).bearer_auth(user.token()); deserialize_response::( request, @@ -59,15 +57,13 @@ impl types::GuildMember { member_id: &str, role_id: &str, ) -> Option { - let belongs_to = user.belongs_to.borrow(); let url = format!( "{}/guilds/{}/members/{}/roles/{}/", - belongs_to.urls.get_api(), + user.belongs_to.borrow().urls.get_api(), guild_id, member_id, role_id ); - drop(belongs_to); let request = Client::new().put(url).bearer_auth(user.token()); handle_request_as_option(request, user, crate::api::limits::LimitType::Guild).await } @@ -90,15 +86,13 @@ impl types::GuildMember { member_id: &str, role_id: &str, ) -> Option { - let belongs_to = user.belongs_to.borrow(); let url = format!( "{}/guilds/{}/members/{}/roles/{}/", - belongs_to.urls.get_api(), + user.belongs_to.borrow().urls.get_api(), guild_id, member_id, role_id ); - drop(belongs_to); let request = Client::new().delete(url).bearer_auth(user.token()); handle_request_as_option(request, user, crate::api::limits::LimitType::Guild).await } diff --git a/src/api/guilds/roles.rs b/src/api/guilds/roles.rs index 15a2915..dd76bf6 100644 --- a/src/api/guilds/roles.rs +++ b/src/api/guilds/roles.rs @@ -27,9 +27,11 @@ impl types::RoleObject { user: &mut UserMeta, guild_id: &str, ) -> Result>, ChorusLibError> { - let belongs_to = user.belongs_to.borrow(); - let url = format!("{}/guilds/{}/roles/", belongs_to.urls.get_api(), guild_id); - drop(belongs_to); + let url = format!( + "{}/guilds/{}/roles/", + user.belongs_to.borrow().urls.get_api(), + guild_id + ); let request = Client::new().get(url).bearer_auth(user.token()); let roles = deserialize_response::>( request, @@ -64,14 +66,12 @@ impl types::RoleObject { guild_id: &str, role_id: &str, ) -> Result { - let belongs_to = user.belongs_to.borrow(); let url = format!( "{}/guilds/{}/roles/{}/", - belongs_to.urls.get_api(), + user.belongs_to.borrow().urls.get_api(), guild_id, role_id ); - drop(belongs_to); let request = Client::new().get(url).bearer_auth(user.token()); deserialize_response(request, user, crate::api::limits::LimitType::Guild).await } @@ -96,17 +96,16 @@ impl types::RoleObject { guild_id: &str, role_create_schema: RoleCreateModifySchema, ) -> Result { - let belongs_to = user.belongs_to.borrow(); - let url = format!("{}/guilds/{}/roles/", belongs_to.urls.get_api(), guild_id); - drop(belongs_to); - let body = match to_string::(&role_create_schema) { - Ok(string) => string, - Err(e) => { - return Err(ChorusLibError::FormCreationError { - error: e.to_string(), - }); + let url = format!( + "{}/guilds/{}/roles/", + user.belongs_to.borrow().urls.get_api(), + guild_id + ); + let body = to_string::(&role_create_schema).map_err(|e| { + ChorusLibError::FormCreationError { + error: e.to_string(), } - }; + })?; let request = Client::new().post(url).bearer_auth(user.token()).body(body); deserialize_response(request, user, crate::api::limits::LimitType::Guild).await } @@ -131,17 +130,16 @@ impl types::RoleObject { guild_id: &str, role_position_update_schema: types::RolePositionUpdateSchema, ) -> Result { - let belongs_to = user.belongs_to.borrow(); - let url = format!("{}/guilds/{}/roles/", belongs_to.urls.get_api(), guild_id); - let body = match to_string(&role_position_update_schema) { - Ok(body) => body, - Err(e) => { - return Err(ChorusLibError::FormCreationError { - error: e.to_string(), - }); + let url = format!( + "{}/guilds/{}/roles/", + user.belongs_to.borrow().urls.get_api(), + guild_id + ); + let body = to_string(&role_position_update_schema).map_err(|e| { + ChorusLibError::FormCreationError { + error: e.to_string(), } - }; - drop(belongs_to); + })?; let request = Client::new() .patch(url) .bearer_auth(user.token()) @@ -172,22 +170,17 @@ impl types::RoleObject { role_id: &str, role_create_schema: RoleCreateModifySchema, ) -> Result { - let belongs_to = user.belongs_to.borrow(); let url = format!( "{}/guilds/{}/roles/{}", - belongs_to.urls.get_api(), + user.belongs_to.borrow().urls.get_api(), guild_id, role_id ); - drop(belongs_to); - let body = match to_string::(&role_create_schema) { - Ok(string) => string, - Err(e) => { - return Err(ChorusLibError::FormCreationError { - error: e.to_string(), - }); + let body = to_string::(&role_create_schema).map_err(|e| { + ChorusLibError::FormCreationError { + error: e.to_string(), } - }; + })?; let request = Client::new() .patch(url) .bearer_auth(user.token()) diff --git a/src/api/users/relationships.rs b/src/api/users/relationships.rs index 65c044e..0a09e2d 100644 --- a/src/api/users/relationships.rs +++ b/src/api/users/relationships.rs @@ -21,13 +21,11 @@ impl UserMeta { &mut self, user_id: &str, ) -> Result, ChorusLibError> { - let belongs_to = self.belongs_to.borrow(); let url = format!( "{}/users/{}/relationships/", - belongs_to.urls.get_api(), + self.belongs_to.borrow().urls.get_api(), user_id ); - drop(belongs_to); let request = Client::new().get(url).bearer_auth(self.token()); deserialize_response::>( request, @@ -42,9 +40,10 @@ impl UserMeta { /// # Returns /// This function returns a [`Result, ChorusLibError>`]. pub async fn get_relationships(&mut self) -> Result, ChorusLibError> { - let belongs_to = self.belongs_to.borrow(); - let url = format!("{}/users/@me/relationships/", belongs_to.urls.get_api(),); - drop(belongs_to); + let url = format!( + "{}/users/@me/relationships/", + self.belongs_to.borrow().urls.get_api() + ); let request = Client::new().get(url).bearer_auth(self.token()); deserialize_response::>( request, @@ -66,9 +65,10 @@ impl UserMeta { &mut self, schema: types::FriendRequestSendSchema, ) -> Option { - let belongs_to = self.belongs_to.borrow(); - let url = format!("{}/users/@me/relationships/", belongs_to.urls.get_api()); - drop(belongs_to); + let url = format!( + "{}/users/@me/relationships/", + self.belongs_to.borrow().urls.get_api() + ); let body = to_string(&schema).unwrap(); let request = Client::new().post(url).bearer_auth(self.token()).body(body); handle_request_as_option(request, self, crate::api::limits::LimitType::Global).await @@ -93,9 +93,7 @@ impl UserMeta { user_id: &str, relationship_type: RelationshipType, ) -> Option { - let belongs_to = self.belongs_to.borrow(); - let api_url = belongs_to.urls.api.clone(); - drop(belongs_to); + let api_url = self.belongs_to.borrow().urls.api.clone(); match relationship_type { RelationshipType::None => { let request = Client::new() @@ -140,13 +138,11 @@ impl UserMeta { /// # Returns /// This function returns an [`Option`] that holds a [`ChorusLibError`] if the request fails. pub async fn remove_relationship(&mut self, user_id: &str) -> Option { - let belongs_to = self.belongs_to.borrow(); let url = format!( "{}/users/@me/relationships/{}/", - belongs_to.urls.get_api(), + self.belongs_to.borrow().urls.get_api(), user_id ); - drop(belongs_to); let request = Client::new().post(url).bearer_auth(self.token()); handle_request_as_option(request, self, crate::api::limits::LimitType::Global).await } diff --git a/src/api/users/users.rs b/src/api/users/users.rs index 8423e01..2e2485e 100644 --- a/src/api/users/users.rs +++ b/src/api/users/users.rs @@ -76,11 +76,12 @@ impl UserMeta { /// /// Returns `None` if the user was successfully deleted, or an `ChorusLibError` if an error occurred. pub async fn delete(mut self) -> Option { - let belongs_to = self.belongs_to.borrow(); 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()); - drop(belongs_to); handle_request_as_option(request, &mut self, crate::api::limits::LimitType::Ip).await } }