From a130eee7a71996f9ae50502c477a2c6494b78a83 Mon Sep 17 00:00:00 2001 From: Max Audron Date: Wed, 26 Feb 2025 22:52:16 +0100 Subject: implement NetworkId UserType --- src/message/handshake/sessioninit.rs | 8 ++++---- src/message/signalproxy/objects/bufferviewconfig.rs | 4 ++-- src/message/signalproxy/objects/networkinfo.rs | 21 +++++++++++++++++---- 3 files changed, 23 insertions(+), 10 deletions(-) (limited to 'src/message') diff --git a/src/message/handshake/sessioninit.rs b/src/message/handshake/sessioninit.rs index 048324d..52e59ae 100644 --- a/src/message/handshake/sessioninit.rs +++ b/src/message/handshake/sessioninit.rs @@ -1,6 +1,6 @@ use crate::error::ProtocolError; use crate::message::objects::Identity; -use crate::primitive::{BufferInfo, Variant, VariantMap}; +use crate::primitive::{BufferInfo, NetworkId, Variant, VariantMap}; use crate::HandshakeSerialize; /// SessionInit is received along with ClientLoginAck to initialize that user Session @@ -12,7 +12,7 @@ pub struct SessionInit { /// List of all existing buffers pub buffers: Vec, /// Ids of all networks - pub network_ids: Vec, + pub network_ids: Vec, } impl From for SessionInit { @@ -36,7 +36,7 @@ impl From for SessionInit { network_ids: match_variant!(state.get("NetworkIds").unwrap(), Variant::VariantList) .iter() .map(|network| match network { - Variant::i32(network) => network.clone(), + Variant::NetworkId(network) => network.clone(), _ => unimplemented!(), }) .collect(), @@ -71,7 +71,7 @@ impl HandshakeSerialize for SessionInit { Variant::VariantList( self.network_ids .iter() - .map(|id| Variant::i32(id.clone())) + .map(|id| Variant::NetworkId(id.clone())) .collect(), ), ); diff --git a/src/message/signalproxy/objects/bufferviewconfig.rs b/src/message/signalproxy/objects/bufferviewconfig.rs index a31ec92..8ca6b82 100644 --- a/src/message/signalproxy/objects/bufferviewconfig.rs +++ b/src/message/signalproxy/objects/bufferviewconfig.rs @@ -7,7 +7,7 @@ use crate::message::StatefulSyncableClient; use crate::message::StatefulSyncableServer; use crate::message::{Class, Syncable}; -use crate::primitive::{BufferId, VariantList}; +use crate::primitive::{BufferId, NetworkId, VariantList}; #[derive(Debug, Default, Clone, PartialEq, NetworkList, NetworkMap)] pub struct BufferViewConfig { @@ -27,7 +27,7 @@ pub struct BufferViewConfig { #[network(rename = "bufferViewName")] pub buffer_view_name: String, #[network(rename = "networkId")] - pub network_id: i32, + pub network_id: NetworkId, #[network(rename = "addNewBuffersAutomatically")] pub add_new_buffers_automatically: bool, #[network(rename = "sortAlphabetically")] diff --git a/src/message/signalproxy/objects/networkinfo.rs b/src/message/signalproxy/objects/networkinfo.rs index b3b2a4d..4cdf8d7 100644 --- a/src/message/signalproxy/objects/networkinfo.rs +++ b/src/message/signalproxy/objects/networkinfo.rs @@ -1,6 +1,6 @@ use crate::{ message::{Class, Syncable}, - primitive::{IdentityId, StringList}, + primitive::{IdentityId, NetworkId, StringList}, }; use libquassel_derive::{NetworkList, NetworkMap, Setters}; @@ -37,7 +37,8 @@ pub struct NetworkInfo { pub codec_for_decoding: String, // TODO add these type aliases or usertypes in variants - // pub network_id: NetworkId, + #[network(rename = "networkId", default)] + pub network_id: NetworkId, #[network(rename = "identityId")] pub identity_id: IdentityId, #[network(rename = "msgRateBurstSize")] @@ -119,6 +120,8 @@ mod tests { Variant::ByteArray(s!("")), Variant::ByteArray(s!("codecForDecoding")), Variant::ByteArray(s!("")), + Variant::ByteArray(s!("networkId")), + Variant::NetworkId(NetworkId(5)), Variant::ByteArray(s!("identityId")), Variant::IdentityId(IdentityId(0)), Variant::ByteArray(s!("msgRateBurstSize")), @@ -151,6 +154,7 @@ mod tests { fn get_runtime() -> NetworkInfo { NetworkInfo { identity_id: IdentityId(0), + network_id: NetworkId(5), network_name: s!("snoonet"), server_list: vec![], perform: vec![s!("")], @@ -179,11 +183,20 @@ mod tests { #[test] fn networkinfo_to_network() { - assert_eq!(get_runtime().to_network_list(), get_network()) + assert_eq!(get_runtime().to_network_list(), get_network()); + assert_eq!(get_runtime().to_network_list(), get_network()); } #[test] fn networkinfo_from_network() { - assert_eq!(NetworkInfo::from_network_list(&mut get_network()), get_runtime()) + assert_eq!(NetworkInfo::from_network_list(&mut get_network()), get_runtime()); + + // Test serialization without given network id + let mut network = get_network(); + network.remove(20); + network.remove(20); + + let left = NetworkInfo::from_network_list(&mut network); + assert_eq!(left.network_id, NetworkId(0)); } } -- cgit v1.2.3