From 2b2ad5fa3794770465d89c16c66f7aadd3f0a540 Mon Sep 17 00:00:00 2001 From: Val Lorentz Date: Sun, 3 Sep 2023 11:40:40 +0200 Subject: [PATCH] Consistently access TargetParameter by pattern-matching This is already done this way in the MODE handler, and it's probably better to always check for exhaustiveness instead of chaining 'if' blocks --- sable_ircd/src/command/handlers/notice.rs | 20 +++++++++------- sable_ircd/src/command/handlers/privmsg.rs | 24 ++++++++++--------- .../src/command/plumbing/target_types.rs | 14 ----------- 3 files changed, 24 insertions(+), 34 deletions(-) diff --git a/sable_ircd/src/command/handlers/notice.rs b/sable_ircd/src/command/handlers/notice.rs index 746ddd3e..e880cf00 100644 --- a/sable_ircd/src/command/handlers/notice.rs +++ b/sable_ircd/src/command/handlers/notice.rs @@ -36,16 +36,18 @@ async fn handle_notice( return Ok(()); } - if let Some(user) = target.user() { - if user.is_alias_user().is_some() { - // This is a notice which doesn't expect a response; drop it - return Ok(()); + match &target { + TargetParameter::User(user) => { + if user.is_alias_user().is_some() { + // This is a notice which doesn't expect a response; drop it + return Ok(()); + } } - } - if let Some(channel) = target.channel() { - if server.policy().can_send(&source, &channel, msg).is_err() { - // Silent error, see above - return Ok(()); + TargetParameter::Channel(channel) => { + if server.policy().can_send(&source, &channel, msg).is_err() { + // Silent error, see above + return Ok(()); + } } } diff --git a/sable_ircd/src/command/handlers/privmsg.rs b/sable_ircd/src/command/handlers/privmsg.rs index 80ccac78..c4d5b1ef 100644 --- a/sable_ircd/src/command/handlers/privmsg.rs +++ b/sable_ircd/src/command/handlers/privmsg.rs @@ -1,4 +1,5 @@ use super::*; +use sable_network::network::config::AliasUser; #[command_handler("PRIVMSG")] async fn handle_privmsg( @@ -13,19 +14,20 @@ async fn handle_privmsg( return numeric_error!(NoTextToSend); } - if let Some(user) = target.user() { - if let Some(alias) = user.is_alias_user() { - return super::services::dispatch_alias_command(cmd, &user, &alias.command_alias, msg) - .await; - } + match &target { + TargetParameter::User(user) => { + if let Some(AliasUser { command_alias, .. }) = user.is_alias_user() { + return super::services::dispatch_alias_command(cmd, &user, &command_alias, msg) + .await; + } - if let Some(away_reason) = user.away_reason() { - response.numeric(make_numeric!(Away, &user, away_reason)); + if let Some(away_reason) = user.away_reason() { + response.numeric(make_numeric!(Away, &user, away_reason)); + } + } + TargetParameter::Channel(channel) => { + server.policy().can_send(&source, &channel, msg)?; } - } - - if let Some(channel) = target.channel() { - server.policy().can_send(&source, &channel, msg)?; } let details = event::details::NewMessage { diff --git a/sable_ircd/src/command/plumbing/target_types.rs b/sable_ircd/src/command/plumbing/target_types.rs index 392ed081..6762a5b4 100644 --- a/sable_ircd/src/command/plumbing/target_types.rs +++ b/sable_ircd/src/command/plumbing/target_types.rs @@ -8,20 +8,6 @@ pub enum TargetParameter<'a> { } impl TargetParameter<'_> { - pub fn user(&self) -> Option<&wrapper::User> { - match self { - Self::User(u) => Some(&u), - Self::Channel(_) => None, - } - } - - pub fn channel(&self) -> Option<&wrapper::Channel> { - match self { - Self::User(_) => None, - Self::Channel(c) => Some(&c), - } - } - pub fn object_id(&self) -> ObjectId { match self { Self::User(u) => u.id().into(),