From 2af049dbab329ba049d137c7fc3a9c3aed6a780e Mon Sep 17 00:00:00 2001 From: Max Audron Date: Sun, 22 Feb 2026 14:16:20 +0100 Subject: add error for unkown sync message slot_name --- src/error.rs | 3 ++- src/message/signalproxy/mod.rs | 6 ++++-- src/message/signalproxy/objects/aliasmanager.rs | 2 +- src/message/signalproxy/objects/buffersyncer.rs | 22 +++++++++++----------- .../signalproxy/objects/bufferviewconfig.rs | 7 ++++--- .../signalproxy/objects/bufferviewmanager.rs | 12 +++++++----- src/message/signalproxy/objects/certmanager.rs | 4 ++-- src/message/signalproxy/objects/coreinfo.rs | 7 ++----- .../signalproxy/objects/highlightrulemanager.rs | 4 ++-- src/message/signalproxy/objects/identity.rs | 2 +- .../signalproxy/objects/ignorelistmanager.rs | 4 ++-- src/message/signalproxy/objects/ircchannel.rs | 2 +- src/message/signalproxy/objects/ircuser.rs | 2 +- src/message/signalproxy/objects/mod.rs | 4 +++- src/message/signalproxy/objects/network.rs | 4 ++-- src/message/signalproxy/objects/networkconfig.rs | 9 ++++++--- 16 files changed, 51 insertions(+), 43 deletions(-) (limited to 'src') diff --git a/src/error.rs b/src/error.rs index 79bec38..6051ab2 100644 --- a/src/error.rs +++ b/src/error.rs @@ -42,7 +42,8 @@ pub enum ProtocolError { UnknownStrictnessType(i32), #[error("got unkown ScopeType: {0}")] UnknownScopeType(i32), - + #[error("got unkown message slot_name: {0}")] + UnknownMsgSlotName(String), } #[derive(Debug, Error)] diff --git a/src/message/signalproxy/mod.rs b/src/message/signalproxy/mod.rs index 727fd06..eb64dad 100644 --- a/src/message/signalproxy/mod.rs +++ b/src/message/signalproxy/mod.rs @@ -99,7 +99,8 @@ pub trait Syncable { /// Send a SyncMessage. fn send_sync(&self, function: &str, params: VariantList) -> Result<()> { crate::message::signalproxy::SYNC_PROXY - .get().ok_or(SyncProxyError::NotInitialized)? + .get() + .ok_or(SyncProxyError::NotInitialized)? .sync(Self::CLASS, None, function, params)?; Ok(()) } @@ -107,7 +108,8 @@ pub trait Syncable { /// Send a RpcCall fn send_rpc(&self, function: &str, params: VariantList) -> Result<()> { crate::message::signalproxy::SYNC_PROXY - .get().ok_or(SyncProxyError::NotInitialized)? + .get() + .ok_or(SyncProxyError::NotInitialized)? .rpc(function, params); Ok(()) } diff --git a/src/message/signalproxy/objects/aliasmanager.rs b/src/message/signalproxy/objects/aliasmanager.rs index df60987..2e2610c 100644 --- a/src/message/signalproxy/objects/aliasmanager.rs +++ b/src/message/signalproxy/objects/aliasmanager.rs @@ -53,7 +53,7 @@ impl StatefulSyncableServer for AliasManager { .pop() .ok_or(crate::ProtocolError::MissingSyncMessageParams)?, )?)), - _ => Ok(()), + unknown => Err(crate::ProtocolError::UnknownMsgSlotName(unknown.to_string())), } } } diff --git a/src/message/signalproxy/objects/buffersyncer.rs b/src/message/signalproxy/objects/buffersyncer.rs index 5e8b8e7..4fd0318 100644 --- a/src/message/signalproxy/objects/buffersyncer.rs +++ b/src/message/signalproxy/objects/buffersyncer.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use crate::{ message::{Class, Syncable}, primitive::{BufferId, MessageType, MsgId}, - Result, + ProtocolError, Result, }; use libquassel_derive::{sync, NetworkList, NetworkMap}; @@ -57,7 +57,7 @@ impl BufferSyncer { #[cfg(feature = "server")] return sync!("markBufferAsRead", [id]); - + #[cfg(feature = "client")] return Ok(()); } @@ -87,7 +87,7 @@ impl BufferSyncer { #[cfg(feature = "server")] return sync!("mergeBuffersPermanently", [source, target]); - + #[cfg(feature = "client")] return Ok(()); } @@ -101,7 +101,7 @@ impl BufferSyncer { #[cfg(feature = "server")] return sync!("removeBuffer", [id]); - + #[cfg(feature = "client")] return Ok(()); } @@ -112,7 +112,7 @@ impl BufferSyncer { pub fn rename_buffer(&mut self, id: i32, name: String) -> Result<()> { #[cfg(feature = "server")] return sync!("renameBuffer", [id, name]); - + #[cfg(feature = "client")] return Ok(()); } @@ -122,7 +122,7 @@ impl BufferSyncer { #[cfg(feature = "server")] return sync!("setBufferActivity", [id, activity.bits()]); - + #[cfg(feature = "client")] return Ok(()); } @@ -132,7 +132,7 @@ impl BufferSyncer { #[cfg(feature = "server")] return sync!("setHighlightCount", [id, count]); - + #[cfg(feature = "client")] return Ok(()); } @@ -142,7 +142,7 @@ impl BufferSyncer { #[cfg(feature = "server")] return sync!("setHighlightCount", [id, msg_id]); - + #[cfg(feature = "client")] return Ok(()); } @@ -152,7 +152,7 @@ impl BufferSyncer { #[cfg(feature = "server")] return sync!("setHighlightCount", [id, msg_id]); - + #[cfg(feature = "client")] return Ok(()); } @@ -176,7 +176,7 @@ impl crate::message::StatefulSyncableClient for BufferSyncer { "setHighlightCount" => self.set_highlight_count(get_param!(msg), get_param!(msg)), "setLastSeenMsg" => self.set_last_seen_msg(get_param!(msg), get_param!(msg)), "setMarkerLine" => self.set_marker_line(get_param!(msg), get_param!(msg)), - _ => Ok(()), + unknown => Err(ProtocolError::UnknownMsgSlotName(unknown.to_string())), } } } @@ -197,7 +197,7 @@ impl crate::message::StatefulSyncableServer for BufferSyncer { "requestRenameBuffer" => self.rename_buffer(get_param!(msg), get_param!(msg)), "requestSetLastSeenMsg" => self.set_last_seen_msg(get_param!(msg), get_param!(msg)), "requestSetMarkerLine" => self.set_marker_line(get_param!(msg), get_param!(msg)), - _ => Ok(()), + unknown => Err(ProtocolError::UnknownMsgSlotName(unknown.to_string())), } } } diff --git a/src/message/signalproxy/objects/bufferviewconfig.rs b/src/message/signalproxy/objects/bufferviewconfig.rs index 9c7f6fc..dd3516b 100644 --- a/src/message/signalproxy/objects/bufferviewconfig.rs +++ b/src/message/signalproxy/objects/bufferviewconfig.rs @@ -8,7 +8,7 @@ use crate::message::StatefulSyncableServer; use crate::message::{Class, Syncable}; use crate::primitive::{BufferId, NetworkId, VariantList}; -use crate::{Result, SyncProxyError}; +use crate::{ProtocolError, Result, SyncProxyError}; #[derive(Debug, Default, Clone, PartialEq, NetworkList, NetworkMap)] pub struct BufferViewConfig { @@ -157,7 +157,7 @@ impl StatefulSyncableClient for BufferViewConfig { ), "removeBuffer" => self.remove_buffer(msg.params.remove(0).try_into()?), "removeBufferPermanently" => self.remove_buffer_permanently(msg.params.remove(0).try_into()?), - _ => Ok(()), + unknown => Err(ProtocolError::UnknownMsgSlotName(unknown.to_string())), } } } @@ -193,8 +193,9 @@ impl StatefulSyncableServer for BufferViewConfig { "setNetworkId" => self.network_id = msg.params.remove(0).try_into()?, "setShowSearch" => self.show_search = msg.params.remove(0).try_into()?, "setSortAlphabetically" => self.sort_alphabetically = msg.params.remove(0).try_into()?, - _ => (), + unknown => Err(ProtocolError::UnknownMsgSlotName(unknown.to_string()))?, } + Ok(()) } } diff --git a/src/message/signalproxy/objects/bufferviewmanager.rs b/src/message/signalproxy/objects/bufferviewmanager.rs index 1ecac4c..341fec2 100644 --- a/src/message/signalproxy/objects/bufferviewmanager.rs +++ b/src/message/signalproxy/objects/bufferviewmanager.rs @@ -10,6 +10,7 @@ use crate::message::StatefulSyncableServer; use crate::message::{NetworkMap, Syncable}; use crate::primitive::{Variant, VariantList, VariantMap}; +use crate::ProtocolError; use crate::Result; use super::BufferViewConfig; @@ -94,7 +95,7 @@ impl StatefulSyncableClient for BufferViewManager { self.add_buffer_view_config(msg.params.remove(0).try_into()?) } "deleteBufferViewConfig" => self.delete_buffer_view_config(msg.params.remove(0).try_into()?), - _ => Ok(()), + unknown => Err(ProtocolError::UnknownMsgSlotName(unknown.to_string())), } } } @@ -108,23 +109,24 @@ impl StatefulSyncableServer for BufferViewManager { match msg.slot_name.as_str() { "requestCreateBufferView" => self.add_buffer_view_config(BufferViewConfig::from_network_map( &mut msg.params.remove(0).try_into()?, - ))?, + )), "requestCreateBufferViews" => { let views: VariantList = msg.params.remove(0).try_into()?; for view in views.into_iter() { self.add_buffer_view_config(BufferViewConfig::from_network_map(&mut view.try_into()?))? } + Ok(()) } - "requestDeleteBufferView" => self.delete_buffer_view_config(msg.params.remove(0).try_into()?)?, + "requestDeleteBufferView" => self.delete_buffer_view_config(msg.params.remove(0).try_into()?), "requestDeleteBufferViews" => { let ids: VariantList = msg.params.remove(0).try_into()?; for id in ids.into_iter() { self.delete_buffer_view_config(id.try_into()?)? } + Ok(()) } - _ => (), + unknown => Err(ProtocolError::UnknownMsgSlotName(unknown.to_string())), } - Ok(()) } } diff --git a/src/message/signalproxy/objects/certmanager.rs b/src/message/signalproxy/objects/certmanager.rs index 240db8d..e3ea4fe 100644 --- a/src/message/signalproxy/objects/certmanager.rs +++ b/src/message/signalproxy/objects/certmanager.rs @@ -28,7 +28,7 @@ impl CertManager { self.send_sync("setSslKey", vec![Variant::ByteArray(key.clone())])?; self.ssl_key = key; - + Ok(()) } } @@ -42,7 +42,7 @@ impl crate::message::StatefulSyncableClient for CertManager { match msg.slot_name.as_str() { "setSslCert" => self.set_ssl_cert(get_param!(msg)), "setSslKey" => self.set_ssl_key(get_param!(msg)), - _ => Ok(()), + unknown => Err(crate::ProtocolError::UnknownMsgSlotName(unknown.to_string())), } } } diff --git a/src/message/signalproxy/objects/coreinfo.rs b/src/message/signalproxy/objects/coreinfo.rs index bde4217..c901f91 100644 --- a/src/message/signalproxy/objects/coreinfo.rs +++ b/src/message/signalproxy/objects/coreinfo.rs @@ -32,7 +32,7 @@ impl crate::message::StatefulSyncableClient for CoreInfo { #[allow(clippy::single_match)] match msg.slot_name.as_str() { "setCoreData" => self.set_core_data(CoreData::from_network_map(&mut get_param!(msg))), - _ => Ok(()), + unknown => Err(crate::ProtocolError::UnknownMsgSlotName(unknown.to_string())), } } @@ -48,10 +48,7 @@ impl crate::message::StatefulSyncableClient for CoreInfo { #[cfg(feature = "server")] impl crate::message::StatefulSyncableServer for CoreInfo { /// Not Implemented - fn request_update( - &mut self, - mut _param: ::Item, - ) -> Result<()> + fn request_update(&mut self, mut _param: ::Item) -> Result<()> where Self: Sized, { diff --git a/src/message/signalproxy/objects/highlightrulemanager.rs b/src/message/signalproxy/objects/highlightrulemanager.rs index aa9fe25..948f08a 100644 --- a/src/message/signalproxy/objects/highlightrulemanager.rs +++ b/src/message/signalproxy/objects/highlightrulemanager.rs @@ -168,7 +168,7 @@ impl StatefulSyncableClient for HighlightRuleManager { }), "setHighlightNick" => self.set_highlight_nick(get_param!(msg)), "setNicksCaseSensitive" => self.set_nicks_case_sensitive(get_param!(msg)), - _ => Ok(()), + unknown => Err(ProtocolError::UnknownMsgSlotName(unknown.to_string())), } } } @@ -194,7 +194,7 @@ impl StatefulSyncableServer for HighlightRuleManager { }), "requestSetHighlightNick" => self.set_highlight_nick(get_param!(msg)), "requestSetNicksCaseSensitive" => self.set_nicks_case_sensitive(get_param!(msg)), - _ => Ok(()), + unknown => Err(ProtocolError::UnknownMsgSlotName(unknown.to_string())), } } } diff --git a/src/message/signalproxy/objects/identity.rs b/src/message/signalproxy/objects/identity.rs index 57cd588..f12e882 100644 --- a/src/message/signalproxy/objects/identity.rs +++ b/src/message/signalproxy/objects/identity.rs @@ -124,7 +124,7 @@ impl StatefulSyncableClient for Identity { "setPartReason" => self.set_part_reason(get_param!(msg)), "setQuitReason" => self.set_quit_reason(get_param!(msg)), "setRealName" => self.set_real_name(get_param!(msg)), - _ => Ok(()), + unknown => Err(crate::ProtocolError::UnknownMsgSlotName(unknown.to_string())), } } } diff --git a/src/message/signalproxy/objects/ignorelistmanager.rs b/src/message/signalproxy/objects/ignorelistmanager.rs index 5a38fd0..4fe5f63 100644 --- a/src/message/signalproxy/objects/ignorelistmanager.rs +++ b/src/message/signalproxy/objects/ignorelistmanager.rs @@ -149,7 +149,7 @@ impl crate::message::StatefulSyncableClient for IgnoreListManager { let rule: String = get_param!(msg); self.toggle_ignore_rule(&rule) } - _ => Ok(()), + unknown => Err(ProtocolError::UnknownMsgSlotName(unknown.to_string())), } } } @@ -178,7 +178,7 @@ impl crate::message::StatefulSyncableServer for IgnoreListManager { let rule: String = get_param!(msg); self.toggle_ignore_rule(&rule) } - _ => Ok(()), + unknown => Err(ProtocolError::UnknownMsgSlotName(unknown.to_string())), } } } diff --git a/src/message/signalproxy/objects/ircchannel.rs b/src/message/signalproxy/objects/ircchannel.rs index d160ac3..2f88cb5 100644 --- a/src/message/signalproxy/objects/ircchannel.rs +++ b/src/message/signalproxy/objects/ircchannel.rs @@ -204,7 +204,7 @@ impl crate::message::StatefulSyncableClient for IrcChannel { "setPassword" => self.set_password(get_param!(msg)), "setTopic" => self.set_topic(get_param!(msg)), "setUserModes" => self.set_user_modes(get_param!(msg), get_param!(msg)), - _ => Ok(()), + unknown => Err(crate::ProtocolError::UnknownMsgSlotName(unknown.to_string())), } } diff --git a/src/message/signalproxy/objects/ircuser.rs b/src/message/signalproxy/objects/ircuser.rs index e9de178..a35e57d 100644 --- a/src/message/signalproxy/objects/ircuser.rs +++ b/src/message/signalproxy/objects/ircuser.rs @@ -157,7 +157,7 @@ impl crate::message::StatefulSyncableClient for IrcUser { "setUserModes" => self.set_user_modes(get_param!(msg)), "setWhoisServiceReply" => self.set_whois_service_reply(get_param!(msg)), "updateHostmask" => self.update_hostmask(get_param!(msg)), - _ => Ok(()), + unknown => Err(crate::ProtocolError::UnknownMsgSlotName(unknown.to_string())), } } } diff --git a/src/message/signalproxy/objects/mod.rs b/src/message/signalproxy/objects/mod.rs index 4bde771..19a8dd1 100644 --- a/src/message/signalproxy/objects/mod.rs +++ b/src/message/signalproxy/objects/mod.rs @@ -125,7 +125,9 @@ impl Types { "CertManager" => Types::CertManager(Box::new(CertManager::from_network_list(input).unwrap())), "Network" => Types::Network(Box::new(Network::from_network_list(input).unwrap())), "NetworkInfo" => Types::NetworkInfo(Box::new(NetworkInfo::from_network_list(input).unwrap())), - "NetworkConfig" => Types::NetworkConfig(Box::new(NetworkConfig::from_network_list(input).unwrap())), + "NetworkConfig" => { + Types::NetworkConfig(Box::new(NetworkConfig::from_network_list(input).unwrap())) + } "IrcChannel" => Types::IrcChannel(Box::new(IrcChannel::from_network_list(input).unwrap())), _ => Types::Unknown(Box::new(input.to_owned())), } diff --git a/src/message/signalproxy/objects/network.rs b/src/message/signalproxy/objects/network.rs index 5c5c0c6..c5cdd1a 100644 --- a/src/message/signalproxy/objects/network.rs +++ b/src/message/signalproxy/objects/network.rs @@ -281,7 +281,7 @@ impl crate::message::StatefulSyncableClient for Network { "setUseCustomMessageRate" => self.network_info.set_use_custom_message_rate(get_param!(msg)), "setUseRandomServer" => self.network_info.set_use_random_server(get_param!(msg)), "setUseSasl" => self.network_info.set_use_sasl(get_param!(msg)), - _ => Ok(()), + unknown => Err(ProtocolError::UnknownMsgSlotName(unknown.to_string())), } } } @@ -299,7 +299,7 @@ impl crate::message::StatefulSyncableServer for Network { let mut map = VariantMap::try_from(msg.params.remove(0))?; self.set_network_info(NetworkInfo::from_network_map(&mut map)) } - _ => Ok(()), + unknown => Err(ProtocolError::UnknownMsgSlotName(unknown.to_string())), } } } diff --git a/src/message/signalproxy/objects/networkconfig.rs b/src/message/signalproxy/objects/networkconfig.rs index 871e387..49e6914 100644 --- a/src/message/signalproxy/objects/networkconfig.rs +++ b/src/message/signalproxy/objects/networkconfig.rs @@ -1,6 +1,9 @@ use libquassel_derive::{NetworkList, NetworkMap, Setters}; -use crate::message::{Class, Syncable}; +use crate::{ + message::{Class, Syncable}, + ProtocolError, +}; #[derive(Debug, Default, Clone, PartialEq, NetworkList, NetworkMap, Setters)] pub struct NetworkConfig { @@ -41,7 +44,7 @@ impl crate::message::StatefulSyncableClient for NetworkConfig { "setPingInterval" => self.set_ping_interval(get_param!(msg)), "setPingTimeoutEnabled" => self.set_ping_timeout_enabled(get_param!(msg)), "setStandardCtcp" => self.set_standard_ctcp(get_param!(msg)), - _ => Ok(()), + unknown => Err(ProtocolError::UnknownMsgSlotName(unknown.to_string())), } } } @@ -61,7 +64,7 @@ impl crate::message::StatefulSyncableServer for NetworkConfig { "requestSetPingInterval" => self.set_ping_interval(get_param!(msg)), "requestSetPingTimeoutEnabled" => self.set_ping_timeout_enabled(get_param!(msg)), "requestSetStandardCtcp" => self.set_standard_ctcp(get_param!(msg)), - _ => Ok(()), + unknown => Err(ProtocolError::UnknownMsgSlotName(unknown.to_string())), } } } -- cgit v1.2.3 t/commit/src/session/mod.rs?id=a89c5cedfd2d46916d51760dcc28b3b3fc04c3bd&follow=1'>added session manager comments and log messageMax Audron-1/+3 2025-02-23add identity syncable to SessionManagerMax Audron-1/+8 2025-02-23add syncables for IrcUserMax Audron-2/+53 2025-02-23move network config to it's own file and impl it's syncMax Audron-23/+84 2025-02-23add basic network syncablesMax Audron-39/+420 2025-02-23clean up unused_import and unused_variables a bitMax Audron-2/+8 2025-02-23fix server feature errorsMax Audron-28/+23 2025-02-23fix ircchannel and maplist network representationMax Audron-154/+137 2025-02-22replace deprecated failure crate with thiserrorMax Audron-278/+194 this changes the public API in that all our methods now return a proper ProtocolError crate. Needed change anyways to properly deal with all our errors in the long run. Will still need to do a pass through the crate to remove all existing unwraps where it makes sense. 2025-02-22update dependencies and fix errorsMax Audron-508/+332 2025-02-22update flakeMax Audron-94/+117 2024-05-22add todos to readmeMax Audron-16/+35