diff --git a/src/database/entities/user.rs b/src/database/entities/user.rs index 91001567..3873c995 100644 --- a/src/database/entities/user.rs +++ b/src/database/entities/user.rs @@ -35,7 +35,7 @@ pub struct Relationship { pub status: RelationshipStatus, } -#[derive(Serialize, Deserialize, Debug, Clone)] +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] pub enum Presence { Online, Idle, @@ -153,12 +153,11 @@ impl User { } // If the user's status is `Presence::Invisible`, return it as `Presence::Offline` - if let Some(mut status) = user.status { - if let Some(presence) = status.presence { - if presence == Presence::Invisible { - status.presence = Some(Presence::Offline); - user.status = Some(status); - user.online = Some(False); + if let Some(status) = &user.status { + if let Some(presence) = &status.presence { + if presence == &Presence::Invisible { + user.status = None; + user.online = Some(false); } } } diff --git a/src/notifications/websocket.rs b/src/notifications/websocket.rs index b8831942..6e3f6dce 100644 --- a/src/notifications/websocket.rs +++ b/src/notifications/websocket.rs @@ -129,11 +129,16 @@ async fn accept(stream: TcpStream) { } } { if let Ok(user) = (Ref { id: id.clone() }).fetch_user().await { - let is_invisible = if let Some(status) = user.status { - if let Some(presence) = status.presence { - presence == Presence::Invisible + let is_invisible = if let Some(status) = &user.status { + if let Some(presence) = &status.presence { + presence == &Presence::Invisible + } else { + false } + } else { + false }; + let was_online = is_online(&id); { diff --git a/src/routes/bots/edit.rs b/src/routes/bots/edit.rs index dc97067b..b0717066 100644 --- a/src/routes/bots/edit.rs +++ b/src/routes/bots/edit.rs @@ -35,7 +35,7 @@ pub async fn edit_bot(user: User, target: Ref, data: Json) -> Result) -> Res Err(Error::MissingPermission)? } - channel.add_to_group(bot.id, user.id).await + channel.add_to_group(bot.id, user.id).await?; + Ok(EmptyResponse {}) } } } diff --git a/src/routes/channels/channel_delete.rs b/src/routes/channels/channel_delete.rs index be1ba540..a08a732a 100644 --- a/src/routes/channels/channel_delete.rs +++ b/src/routes/channels/channel_delete.rs @@ -70,7 +70,8 @@ pub async fn req(user: User, target: Ref) -> Result { target.publish_update(json!({ "owner": new_owner })).await?; } else { - return target.delete().await; + target.delete().await?; + return Ok(EmptyResponse {}); } } else { get_collection("channels") @@ -108,7 +109,8 @@ pub async fn req(user: User, target: Ref) -> Result { Channel::TextChannel { .. } | Channel::VoiceChannel { .. } => { if perm.get_manage_channel() { - target.delete().await + target.delete().await?; + Ok(EmptyResponse {}) } else { Err(Error::MissingPermission) } diff --git a/src/routes/channels/group_add_member.rs b/src/routes/channels/group_add_member.rs index 37e2bbe9..4b21ea9a 100644 --- a/src/routes/channels/group_add_member.rs +++ b/src/routes/channels/group_add_member.rs @@ -19,6 +19,6 @@ pub async fn req(user: User, target: Ref, member: Ref) -> Result Err(Error::MissingPermission)? } - channel.add_to_group(member.id, user.id).await; + channel.add_to_group(member.id, user.id).await?; Ok(EmptyResponse {}) } diff --git a/src/routes/channels/message_delete.rs b/src/routes/channels/message_delete.rs index f22762d9..90586d6f 100644 --- a/src/routes/channels/message_delete.rs +++ b/src/routes/channels/message_delete.rs @@ -24,6 +24,6 @@ pub async fn req(user: User, target: Ref, msg: Ref) -> Result { } } - message.delete().await; + message.delete().await?; Ok(EmptyResponse {}) } diff --git a/src/routes/channels/message_edit.rs b/src/routes/channels/message_edit.rs index 094b950b..3b44c88c 100644 --- a/src/routes/channels/message_edit.rs +++ b/src/routes/channels/message_edit.rs @@ -73,6 +73,6 @@ pub async fn req(user: User, target: Ref, msg: Ref, edit: Json) -> Result< with: "message", })?; - message.publish_update(update).await; + message.publish_update(update).await?; Ok(EmptyResponse {}) } diff --git a/src/routes/invites/invite_delete.rs b/src/routes/invites/invite_delete.rs index c5557ad9..7d129f6f 100644 --- a/src/routes/invites/invite_delete.rs +++ b/src/routes/invites/invite_delete.rs @@ -6,7 +6,7 @@ pub async fn req(user: User, target: Ref) -> Result { let target = target.fetch_invite().await?; if target.creator() == &user.id { - target.delete().await + target.delete().await?; } else { match &target { Invite::Server { server, .. } => { @@ -20,10 +20,11 @@ pub async fn req(user: User, target: Ref) -> Result { return Err(Error::MissingPermission); } - target.delete().await; - Ok(EmptyResponse {}) + target.delete().await?; } _ => unreachable!(), } } + + Ok(EmptyResponse {}) } diff --git a/src/routes/push/subscribe.rs b/src/routes/push/subscribe.rs index 565750de..2b28b6f2 100644 --- a/src/routes/push/subscribe.rs +++ b/src/routes/push/subscribe.rs @@ -1,10 +1,10 @@ use crate::database::*; -use crate::util::result::{Error, Result}; +use crate::util::result::{EmptyResponse, Error, Result}; use mongodb::bson::{doc, to_document}; use rauth::auth::Session; use rocket::serde::json::Json; -use serde::{Deserialize, Serialize, EmptyResponse}; +use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize)] pub struct Subscription { diff --git a/src/routes/servers/ban_create.rs b/src/routes/servers/ban_create.rs index 6dc215c7..51490f71 100644 --- a/src/routes/servers/ban_create.rs +++ b/src/routes/servers/ban_create.rs @@ -57,6 +57,6 @@ pub async fn req(user: User, server: Ref, target: Ref, data: Json) -> Resu with: "server_ban", })?; - server.remove_member(&target.id, RemoveMember::Ban).await; + server.remove_member(&target.id, RemoveMember::Ban).await?; Ok(EmptyResponse {}) } diff --git a/src/routes/servers/member_edit.rs b/src/routes/servers/member_edit.rs index dc1b79e5..0f7d3e28 100644 --- a/src/routes/servers/member_edit.rs +++ b/src/routes/servers/member_edit.rs @@ -25,7 +25,7 @@ pub async fn req(user: User, server: Ref, target: String, data: Json) -> R .map_err(|error| Error::FailedValidation { error })?; if data.nickname.is_none() && data.avatar.is_none() && data.roles.is_none() && data.remove.is_none() { - return Ok(()); + return Ok(EmptyResponse {}); } let server = server.fetch_server().await?; diff --git a/src/routes/servers/member_remove.rs b/src/routes/servers/member_remove.rs index 6abe2e65..519be8c8 100644 --- a/src/routes/servers/member_remove.rs +++ b/src/routes/servers/member_remove.rs @@ -27,7 +27,7 @@ pub async fn req(user: User, target: Ref, member: String) -> Result) -> if data.name.is_none() && data.colour.is_none() && data.hoist.is_none() && data.rank.is_none() && data.remove.is_none() { - return Ok(()); + return Ok(EmptyResponse {}); } let target = target.fetch_server().await?; diff --git a/src/routes/servers/server_ack.rs b/src/routes/servers/server_ack.rs index 199fb843..5d2b22b9 100644 --- a/src/routes/servers/server_ack.rs +++ b/src/routes/servers/server_ack.rs @@ -18,6 +18,6 @@ pub async fn req(user: User, target: Ref) -> Result { Err(Error::MissingPermission)? } - target.mark_as_read(&user.id).await; + target.mark_as_read(&user.id).await?; Ok(EmptyResponse {}) } diff --git a/src/routes/servers/server_delete.rs b/src/routes/servers/server_delete.rs index a7abaafd..2f21f124 100644 --- a/src/routes/servers/server_delete.rs +++ b/src/routes/servers/server_delete.rs @@ -16,8 +16,10 @@ pub async fn req(user: User, target: Ref) -> Result { } if user.id == target.owner { - target.delete().await + target.delete().await?; } else { - target.remove_member(&user.id, RemoveMember::Leave).await + target.remove_member(&user.id, RemoveMember::Leave).await?; } + + Ok(EmptyResponse {}) } diff --git a/src/routes/users/fetch_user.rs b/src/routes/users/fetch_user.rs index 0876aeb4..831735f3 100644 --- a/src/routes/users/fetch_user.rs +++ b/src/routes/users/fetch_user.rs @@ -5,7 +5,7 @@ use rocket::serde::json::Value; #[get("/")] pub async fn req(user: User, target: Ref) -> Result { - let mut target = target.fetch_user().await?; + let target = target.fetch_user().await?; let perm = permissions::PermissionCalculator::new(&user) .with_user(&target) diff --git a/src/util/result.rs b/src/util/result.rs index 845cfdf1..6279a598 100644 --- a/src/util/result.rs +++ b/src/util/result.rs @@ -71,8 +71,8 @@ pub enum Error { pub struct EmptyResponse; pub type Result = std::result::Result; -impl<'r> Responder<'r> for EmptyResponse { - fn respond_to(self, req: &Request) -> response::Result<'r> { +impl<'r> Responder<'r, 'static> for EmptyResponse { + fn respond_to(self, _: &'r Request<'_>) -> response::Result<'static> { Response::build() .status(rocket::http::Status { code: 204 }) .ok()