diff options
Diffstat (limited to '')
| -rw-r--r-- | src/message/signalproxy/mod.rs | 21 | ||||
| -rw-r--r-- | src/message/signalproxy/objects/aliasmanager.rs | 9 | ||||
| -rw-r--r-- | src/message/signalproxy/objects/buffersyncer.rs | 10 | ||||
| -rw-r--r-- | src/message/signalproxy/objects/bufferview.rs | 15 | ||||
| -rw-r--r-- | src/message/signalproxy/objects/certmanager.rs | 5 | ||||
| -rw-r--r-- | src/message/signalproxy/objects/coreinfo.rs | 13 | ||||
| -rw-r--r-- | src/message/signalproxy/objects/highlightrulemanager.rs | 19 | ||||
| -rw-r--r-- | src/message/signalproxy/objects/identity.rs | 5 | ||||
| -rw-r--r-- | src/message/signalproxy/objects/ignorelistmanager.rs | 17 | ||||
| -rw-r--r-- | src/message/signalproxy/objects/ircchannel.rs | 24 | ||||
| -rw-r--r-- | src/message/signalproxy/objects/ircuser.rs | 11 | ||||
| -rw-r--r-- | src/message/signalproxy/objects/mod.rs | 52 | ||||
| -rw-r--r-- | src/message/signalproxy/objects/network.rs | 43 | ||||
| -rw-r--r-- | src/message/signalproxy/objects/networkinfo.rs | 17 | ||||
| -rw-r--r-- | src/message/signalproxy/translation/mod.rs | 8 |
15 files changed, 142 insertions, 127 deletions
diff --git a/src/message/signalproxy/mod.rs b/src/message/signalproxy/mod.rs index 41057ca..d5cdd80 100644 --- a/src/message/signalproxy/mod.rs +++ b/src/message/signalproxy/mod.rs @@ -1,10 +1,7 @@ -use std::convert::TryInto; - use crate::{ deserialize::Deserialize, - primitive::{VariantList, VariantMap}, + primitive::{Variant, VariantList}, serialize::Serialize, - session::Session, }; use num_derive::{FromPrimitive, ToPrimitive}; @@ -63,9 +60,14 @@ pub trait Syncable { /// A Stateful Syncable Object #[allow(unused_variables)] -pub trait StatefulSyncable: Syncable + translation::NetworkMap { +pub trait StatefulSyncable: Syncable + translation::NetworkMap +// where +// <T as Iterator>::Item: ToString, +where + Variant: From<<Self as translation::NetworkMap>::Item>, +{ /// Client -> Server: Update the whole object with received data - fn update(&mut self, session: impl SyncProxy, param: VariantMap) + fn update(&mut self, session: impl SyncProxy, param: <Self as translation::NetworkMap>::Item) where Self: Sized, { @@ -80,8 +82,11 @@ pub trait StatefulSyncable: Syncable + translation::NetworkMap { } /// Server -> Client: Update the whole object with received data - fn request_update(&mut self, session: impl SyncProxy, mut param: VariantMap) - where + fn request_update( + &mut self, + session: impl SyncProxy, + mut param: <Self as translation::NetworkMap>::Item, + ) where Self: Sized, { #[cfg(feature = "client")] diff --git a/src/message/signalproxy/objects/aliasmanager.rs b/src/message/signalproxy/objects/aliasmanager.rs index cb634ba..d696aae 100644 --- a/src/message/signalproxy/objects/aliasmanager.rs +++ b/src/message/signalproxy/objects/aliasmanager.rs @@ -1,18 +1,17 @@ use std::convert::TryInto; -use libquassel_derive::{Network, NetworkList, NetworkMap}; +use libquassel_derive::{NetworkList, NetworkMap}; use crate::message::{StatefulSyncable, SyncProxy, Syncable}; -use crate::message::signalproxy::translation::{Network, NetworkMap}; -use crate::primitive::{VariantList, VariantMap}; +use crate::message::signalproxy::translation::NetworkMap; /// AliasManager /// keeps a list of all registered aliases /// syncable #[derive(Clone, Debug, std::cmp::PartialEq, NetworkList, NetworkMap)] pub struct AliasManager { - #[network(rename = "Aliases", variant = "VariantMap", network)] + #[network(rename = "Aliases", variant = "VariantMap", network, map)] pub aliases: Vec<Alias>, } @@ -51,7 +50,7 @@ impl Syncable for AliasManager { /// Alias /// Represents a signle alias -#[derive(Clone, Debug, std::cmp::PartialEq, Network)] +#[derive(Clone, Debug, std::cmp::PartialEq, NetworkMap)] #[network(repr = "maplist")] pub struct Alias { #[network(rename = "names", variant = "StringList")] diff --git a/src/message/signalproxy/objects/buffersyncer.rs b/src/message/signalproxy/objects/buffersyncer.rs index ecacbc9..62ee793 100644 --- a/src/message/signalproxy/objects/buffersyncer.rs +++ b/src/message/signalproxy/objects/buffersyncer.rs @@ -1,9 +1,11 @@ use std::collections::HashMap; use crate::primitive::MessageType; -use libquassel_derive::Network; +use libquassel_derive::NetworkList; -#[derive(Debug, Clone, PartialEq, Network)] +use crate::message::signalproxy::translation::Network; + +#[derive(Debug, Clone, PartialEq, NetworkList)] #[network(repr = "list")] pub struct BufferSyncer { #[network(rename = "Activities", network, variant = "VariantList")] @@ -82,7 +84,7 @@ pub trait BufferSyncerClient { #[cfg(test)] mod tests { use super::*; - use crate::message::signalproxy::translation::Network; + use crate::message::signalproxy::translation::NetworkList; use crate::primitive::{Variant, VariantList}; use pretty_assertions::assert_eq; @@ -185,7 +187,7 @@ mod tests { #[test] fn buffersyncer_from_network() { assert_eq!( - BufferSyncer::from_network(&mut get_network()), + BufferSyncer::from_network_list(&mut get_network()), get_runtime() ) } diff --git a/src/message/signalproxy/objects/bufferview.rs b/src/message/signalproxy/objects/bufferview.rs index 512a5b9..5ac608c 100644 --- a/src/message/signalproxy/objects/bufferview.rs +++ b/src/message/signalproxy/objects/bufferview.rs @@ -1,6 +1,8 @@ -use libquassel_derive::Network; use std::{collections::HashMap, convert::TryInto}; +use libquassel_derive::NetworkList; + +use crate::message::signalproxy::translation::Network; use crate::primitive::{Variant, VariantList}; #[derive(Debug, Clone, PartialEq)] @@ -27,10 +29,8 @@ pub struct BufferViewManager { // update(properties: QVariantMap) } -impl super::Network for BufferViewManager { - type Item = VariantList; - - fn to_network(&self) -> Self::Item { +impl super::NetworkList for BufferViewManager { + fn to_network_list(&self) -> VariantList { let mut res = Vec::with_capacity(2); res.push(Variant::ByteArray(s!("bufferViewIds"))); @@ -44,7 +44,7 @@ impl super::Network for BufferViewManager { return res; } - fn from_network(_input: &mut Self::Item) -> Self { + fn from_network_list(_input: &mut VariantList) -> Self { // TODO Somehow do the initrequests for all the IDs we get here Self { buffer_view_configs: HashMap::new(), @@ -52,8 +52,7 @@ impl super::Network for BufferViewManager { } } -#[derive(Debug, Clone, PartialEq, Network)] -#[network(repr = "list")] +#[derive(Debug, Clone, PartialEq, NetworkList)] pub struct BufferViewConfig { #[network(rename = "BufferList", network, variant = "VariantList")] pub buffers: Vec<i32>, diff --git a/src/message/signalproxy/objects/certmanager.rs b/src/message/signalproxy/objects/certmanager.rs index 238c495..d105fcf 100644 --- a/src/message/signalproxy/objects/certmanager.rs +++ b/src/message/signalproxy/objects/certmanager.rs @@ -1,7 +1,6 @@ -use libquassel_derive::Network; +use libquassel_derive::NetworkList; -#[derive(Debug, Clone, PartialEq, Network)] -#[network(repr = "list")] +#[derive(Debug, Clone, PartialEq, NetworkList)] pub struct CertManager { #[network(rename = "sslKey", variant = "ByteArray")] pub ssl_key: String, diff --git a/src/message/signalproxy/objects/coreinfo.rs b/src/message/signalproxy/objects/coreinfo.rs index a717366..ef9826f 100644 --- a/src/message/signalproxy/objects/coreinfo.rs +++ b/src/message/signalproxy/objects/coreinfo.rs @@ -1,11 +1,11 @@ -use libquassel_derive::Network; +use libquassel_derive::NetworkMap; use crate::primitive::{DateTime, StringList}; -#[derive(Debug, Clone, PartialEq, Network)] +#[derive(Debug, Clone, PartialEq, NetworkMap)] #[network(repr = "map")] pub struct CoreInfo { - #[network(rename = "coreData", network, variant = "VariantMap")] + #[network(rename = "coreData", variant = "VariantMap", network)] core_data: CoreData, } @@ -17,7 +17,7 @@ pub struct CoreInfo { // */ // update(properties: QVariantMap) -#[derive(Debug, Clone, PartialEq, Network)] +#[derive(Debug, Clone, PartialEq, NetworkMap)] #[network(repr = "map")] pub struct CoreData { #[network(rename = "quasselVersion")] @@ -31,12 +31,13 @@ pub struct CoreData { #[network( rename = "sessionConnectedClientData", variant = "VariantList", - network + network, + map )] session_connected_client_data: Vec<ConnectedClient>, } -#[derive(Debug, Clone, PartialEq, Network)] +#[derive(Debug, Clone, PartialEq, NetworkMap)] #[network(repr = "map")] pub struct ConnectedClient { #[network(rename = "id")] diff --git a/src/message/signalproxy/objects/highlightrulemanager.rs b/src/message/signalproxy/objects/highlightrulemanager.rs index e6429d2..ef64a2c 100644 --- a/src/message/signalproxy/objects/highlightrulemanager.rs +++ b/src/message/signalproxy/objects/highlightrulemanager.rs @@ -1,20 +1,21 @@ -use libquassel_derive::Network; +use libquassel_derive::{NetworkList, NetworkMap}; + +use crate::message::signalproxy::translation::{Network, NetworkMap}; use num_derive::{FromPrimitive, ToPrimitive}; use num_traits::{FromPrimitive, ToPrimitive}; -#[derive(Debug, Clone, PartialEq, Network)] -#[network(repr = "list")] +#[derive(Debug, Clone, PartialEq, NetworkList)] pub struct HighlightRuleManager { - #[network(rename = "HighlightRuleList", network, variant = "VariantMap")] + #[network(rename = "HighlightRuleList", variant = "VariantMap", network, map)] highlight_rule_list: Vec<HighlightRule>, - #[network(rename = "highlightNick", network, variant = "i32")] + #[network(rename = "highlightNick", variant = "i32", network)] highlight_nick: HighlightNickType, #[network(rename = "nicksCaseSensitive")] nicks_case_sensitive: bool, } -#[derive(Debug, Clone, PartialEq, Network)] +#[derive(Debug, Clone, PartialEq, NetworkMap)] #[network(repr = "maplist")] pub struct HighlightRule { id: i32, @@ -56,7 +57,7 @@ impl crate::message::signalproxy::Network for HighlightNickType { #[cfg(test)] mod tests { use super::*; - use crate::message::signalproxy::translation::Network; + use crate::message::signalproxy::translation::NetworkList; use crate::primitive::{Variant, VariantList}; use pretty_assertions::assert_eq; @@ -100,13 +101,13 @@ mod tests { #[test] fn highlightrulemanager_to_network() { - assert_eq!(get_runtime().to_network(), get_network()) + assert_eq!(get_runtime().to_network_list(), get_network()) } #[test] fn highlightrulemanager_from_network() { assert_eq!( - HighlightRuleManager::from_network(&mut get_network()), + HighlightRuleManager::from_network_list(&mut get_network()), get_runtime() ) } diff --git a/src/message/signalproxy/objects/identity.rs b/src/message/signalproxy/objects/identity.rs index 3c05c87..e173689 100644 --- a/src/message/signalproxy/objects/identity.rs +++ b/src/message/signalproxy/objects/identity.rs @@ -1,7 +1,6 @@ -use libquassel_derive::Network; +use libquassel_derive::NetworkMap; -#[derive(Debug, Clone, PartialEq, Network)] -#[network(repr = "map")] +#[derive(Debug, Clone, PartialEq, NetworkMap)] pub struct Identity { #[network(rename = "identityId")] identity_id: i32, diff --git a/src/message/signalproxy/objects/ignorelistmanager.rs b/src/message/signalproxy/objects/ignorelistmanager.rs index f98ed36..a3d9798 100644 --- a/src/message/signalproxy/objects/ignorelistmanager.rs +++ b/src/message/signalproxy/objects/ignorelistmanager.rs @@ -1,10 +1,11 @@ -use libquassel_derive::Network; +use crate::message::signalproxy::translation::{Network, NetworkMap}; +use libquassel_derive::{NetworkList, NetworkMap}; + use std::convert::TryFrom; -#[derive(Debug, Clone, PartialEq, Network)] -#[network(repr = "list")] +#[derive(Debug, Clone, PartialEq, NetworkList)] pub struct IgnoreListManager { - #[network(rename = "IgnoreList", network, variant = "VariantMap")] + #[network(rename = "IgnoreList", variant = "VariantMap", network, map)] ignore_list: Vec<IgnoreListItem>, // // C->S calls @@ -32,7 +33,7 @@ pub struct IgnoreListManager { // update(properties: QVariantMap) } -#[derive(Debug, Clone, PartialEq, Network)] +#[derive(Debug, Clone, PartialEq, NetworkMap)] #[network(repr = "maplist")] pub struct IgnoreListItem { #[network(rename = "ignoreType", network, type = "u8")] @@ -76,7 +77,7 @@ impl TryFrom<u8> for IgnoreType { } } -impl super::Network for IgnoreType { +impl crate::message::signalproxy::Network for IgnoreType { type Item = u8; fn to_network(&self) -> Self::Item { @@ -109,7 +110,7 @@ impl TryFrom<u8> for StrictnessType { } } -impl super::Network for StrictnessType { +impl crate::message::signalproxy::Network for StrictnessType { type Item = u8; fn to_network(&self) -> Self::Item { @@ -142,7 +143,7 @@ impl TryFrom<u8> for ScopeType { } } -impl super::Network for ScopeType { +impl crate::message::signalproxy::Network for ScopeType { type Item = u8; fn to_network(&self) -> Self::Item { diff --git a/src/message/signalproxy/objects/ircchannel.rs b/src/message/signalproxy/objects/ircchannel.rs index ee23f07..16f1f10 100644 --- a/src/message/signalproxy/objects/ircchannel.rs +++ b/src/message/signalproxy/objects/ircchannel.rs @@ -2,10 +2,9 @@ use std::collections::HashMap; use std::convert::TryFrom; use std::convert::TryInto; +use crate::message::NetworkMap; use crate::primitive::{StringList, Variant, VariantList, VariantMap}; -use crate::message::signalproxy::Network; - #[allow(dead_code)] #[derive(Debug, Clone, PartialEq)] pub struct IrcChannel { @@ -29,10 +28,10 @@ pub struct IrcChannel { // D(char), // } -impl Network for Vec<IrcChannel> { +impl NetworkMap for Vec<IrcChannel> { type Item = VariantMap; - fn to_network(&self) -> Self::Item { + fn to_network_map(&self) -> Self::Item { let mut channelmodes: VariantList = Vec::with_capacity(self.len()); let mut usermodes: VariantList = Vec::with_capacity(self.len()); let mut name: VariantList = Vec::with_capacity(self.len()); @@ -103,23 +102,23 @@ impl Network for Vec<IrcChannel> { map } - fn from_network(input: &mut Self::Item) -> Self { + fn from_network_map(input: &mut Self::Item) -> Self { let marker: VariantList = std::convert::TryInto::try_into(input.get("name").unwrap()).unwrap(); let mut res = Vec::new(); for _ in 0..marker.len() { - res.push(IrcChannel::from_network(input)); + res.push(IrcChannel::from_network_map(input)); } return res; } } -impl Network for IrcChannel { +impl NetworkMap for IrcChannel { type Item = VariantMap; - fn to_network(&self) -> Self::Item { + fn to_network_map(&self) -> Self::Item { let mut res = VariantMap::new(); res.insert( @@ -188,7 +187,7 @@ impl Network for IrcChannel { res } - fn from_network(input: &mut Self::Item) -> Self { + fn from_network_map(input: &mut Self::Item) -> Self { let mut chanmodes: VariantMap = match_variant!( match_variant!(input.get_mut("ChanModes").unwrap(), Variant::VariantList).remove(0), Variant::VariantMap @@ -334,11 +333,14 @@ mod tests { #[test] fn ircchannel_to_network() { - assert_eq!(get_runtime().to_network(), get_network()) + assert_eq!(get_runtime().to_network_map(), get_network()) } #[test] fn ircchannel_from_network() { - assert_eq!(IrcChannel::from_network(&mut get_network()), get_runtime()) + assert_eq!( + IrcChannel::from_network_map(&mut get_network()), + get_runtime() + ) } } diff --git a/src/message/signalproxy/objects/ircuser.rs b/src/message/signalproxy/objects/ircuser.rs index 85fea81..6b14c70 100644 --- a/src/message/signalproxy/objects/ircuser.rs +++ b/src/message/signalproxy/objects/ircuser.rs @@ -2,10 +2,10 @@ use crate::primitive::{DateTime, StringList}; #[allow(unused_imports)] use crate::message::signalproxy::Network; -use libquassel_derive::Network; +use libquassel_derive::NetworkMap; #[allow(dead_code)] -#[derive(Debug, Clone, PartialEq, Network)] +#[derive(Debug, Clone, PartialEq, NetworkMap)] #[network(repr = "maplist")] pub struct IrcUser { pub user: String, @@ -38,6 +38,7 @@ pub struct IrcUser { #[cfg(test)] mod tests { + use crate::message::signalproxy::NetworkMap; use crate::primitive::{Variant, VariantMap}; use time::OffsetDateTime; @@ -191,16 +192,16 @@ mod tests { #[test] fn ircuser_to_network() { - assert_eq!(get_runtime().to_network(), get_network()) + assert_eq!(get_runtime().to_network_map(), get_network()) } #[test] fn ircuser_from_network() { - assert_eq!(IrcUser::from_network(&mut get_network()), get_runtime()) + assert_eq!(IrcUser::from_network_map(&mut get_network()), get_runtime()) } #[test] fn vec_ircuser_to_network() { - assert_eq!(get_runtime().to_network(), get_network()) + assert_eq!(get_runtime().to_network_map(), get_network()) } } diff --git a/src/message/signalproxy/objects/mod.rs b/src/message/signalproxy/objects/mod.rs index 72737a0..20c78a2 100644 --- a/src/message/signalproxy/objects/mod.rs +++ b/src/message/signalproxy/objects/mod.rs @@ -29,7 +29,7 @@ pub use networkinfo::*; use libquassel_derive::From; use log::debug; -use super::{Network, NetworkList}; +use super::{NetworkList, NetworkMap}; use crate::primitive::VariantList; /// Central Enum containing and identifying all Quassel Protocol Types: @@ -73,17 +73,17 @@ impl Types { debug!("converting to network object: {:#?}", self); match self { Types::AliasManager(val) => val.to_network_list(), - Types::BufferSyncer(val) => val.to_network(), - Types::BufferViewConfig(val) => val.to_network(), - Types::BufferViewManager(val) => val.to_network(), - Types::CoreInfo(val) => vec![val.to_network().into()], - Types::CoreData(val) => vec![val.to_network().into()], - Types::HighlightRuleManager(val) => val.to_network(), - Types::IgnoreListManager(val) => val.to_network(), - Types::CertManager(val) => val.to_network(), - Types::Network(val) => val.to_network(), - Types::NetworkInfo(val) => val.to_network(), - Types::NetworkConfig(val) => val.to_network(), + Types::BufferSyncer(val) => val.to_network_list(), + Types::BufferViewConfig(val) => val.to_network_list(), + Types::BufferViewManager(val) => val.to_network_list(), + Types::CoreInfo(val) => vec![val.to_network_map().into()], + Types::CoreData(val) => vec![val.to_network_map().into()], + Types::HighlightRuleManager(val) => val.to_network_list(), + Types::IgnoreListManager(val) => val.to_network_list(), + Types::CertManager(val) => val.to_network_list(), + Types::Network(val) => val.to_network_list(), + Types::NetworkInfo(val) => val.to_network_list(), + Types::NetworkConfig(val) => val.to_network_list(), Types::Unknown(val) => val.clone(), } } @@ -95,23 +95,29 @@ impl Types { ); match class_name { "AliasManager" => Types::AliasManager(AliasManager::from_network_list(input)), - "BufferSyncer" => Types::BufferSyncer(BufferSyncer::from_network(input)), - "BufferViewConfig" => Types::BufferViewConfig(BufferViewConfig::from_network(input)), - "BufferViewManager" => Types::BufferViewManager(BufferViewManager::from_network(input)), - "CoreInfo" => Types::CoreInfo(CoreInfo::from_network( + "BufferSyncer" => Types::BufferSyncer(BufferSyncer::from_network_list(input)), + "BufferViewConfig" => { + Types::BufferViewConfig(BufferViewConfig::from_network_list(input)) + } + "BufferViewManager" => { + Types::BufferViewManager(BufferViewManager::from_network_list(input)) + } + "CoreInfo" => Types::CoreInfo(CoreInfo::from_network_map( &mut input.remove(0).try_into().unwrap(), )), - "CoreData" => Types::CoreData(CoreData::from_network( + "CoreData" => Types::CoreData(CoreData::from_network_map( &mut input.remove(0).try_into().unwrap(), )), "HighlightRuleManager" => { - Types::HighlightRuleManager(HighlightRuleManager::from_network(input)) + Types::HighlightRuleManager(HighlightRuleManager::from_network_list(input)) + } + "IgnoreListManager" => { + Types::IgnoreListManager(IgnoreListManager::from_network_list(input)) } - "IgnoreListManager" => Types::IgnoreListManager(IgnoreListManager::from_network(input)), - "CertManager" => Types::CertManager(CertManager::from_network(input)), - "Network" => Types::Network(Network::from_network(input)), - "NetworkInfo" => Types::NetworkInfo(NetworkInfo::from_network(input)), - "NetworkConfig" => Types::NetworkConfig(NetworkConfig::from_network(input)), + "CertManager" => Types::CertManager(CertManager::from_network_list(input)), + "Network" => Types::Network(Network::from_network_list(input)), + "NetworkInfo" => Types::NetworkInfo(NetworkInfo::from_network_list(input)), + "NetworkConfig" => Types::NetworkConfig(NetworkConfig::from_network_list(input)), _ => Types::Unknown(input.to_owned()), } } diff --git a/src/message/signalproxy/objects/network.rs b/src/message/signalproxy/objects/network.rs index cecc412..2fa4c49 100644 --- a/src/message/signalproxy/objects/network.rs +++ b/src/message/signalproxy/objects/network.rs @@ -1,14 +1,14 @@ -use std::convert::TryInto; - -use crate::primitive::{Variant, VariantList, VariantMap}; - -use libquassel_derive::Network; - use std::collections::HashMap; +use std::convert::TryInto; use num_derive::{FromPrimitive, ToPrimitive}; use num_traits::FromPrimitive; +use libquassel_derive::{NetworkList, NetworkMap}; + +use crate::message::signalproxy::translation::NetworkMap; +use crate::primitive::{Variant, VariantList, VariantMap}; + use super::{ircchannel::IrcChannel, ircuser::IrcUser, networkinfo::NetworkInfo}; #[derive(Debug, Clone, PartialEq)] @@ -29,11 +29,9 @@ pub struct Network { network_info: NetworkInfo, } -impl crate::message::signalproxy::Network for Network { - type Item = VariantList; - - fn to_network(&self) -> Self::Item { - let mut res = Self::Item::new(); +impl crate::message::signalproxy::NetworkList for Network { + fn to_network_list(&self) -> VariantList { + let mut res = VariantList::new(); res.push(Variant::ByteArray(s!("myNick"))); res.push(Variant::String(self.my_nick.clone())); @@ -78,7 +76,7 @@ impl crate::message::signalproxy::Network for Network { Variant::VariantMap(self.irc_users.iter().fold( HashMap::new(), |mut res, (_, v)| { - res.extend(v.to_network()); + res.extend(v.to_network_map()); res }, @@ -89,7 +87,7 @@ impl crate::message::signalproxy::Network for Network { .irc_channels .iter() .fold(HashMap::new(), |mut res, (_, v)| { - res.extend(v.to_network()); + res.extend(v.to_network_map()); res }); @@ -100,12 +98,12 @@ impl crate::message::signalproxy::Network for Network { res.push(Variant::VariantMap(map)); } - res.extend(self.network_info.to_network()); + res.extend(self.network_info.to_network_list()); res } - fn from_network(input: &mut Self::Item) -> Self { + fn from_network_list(input: &mut VariantList) -> Self { let mut i = input.iter().cycle(); let users_and_channels: VariantMap = { @@ -152,7 +150,7 @@ impl crate::message::signalproxy::Network for Network { irc_users: { match users_and_channels.get("Users") { Some(users) => { - let users: Vec<IrcUser> = Vec::<IrcUser>::from_network( + let users: Vec<IrcUser> = Vec::<IrcUser>::from_network_map( &mut users.try_into().expect("failed to convert Users"), ); @@ -168,7 +166,7 @@ impl crate::message::signalproxy::Network for Network { match users_and_channels.get("Channels") { Some(channels) => { let channels: Vec<IrcChannel> = - Vec::<IrcChannel>::from_network(&mut channels.try_into().unwrap()); + Vec::<IrcChannel>::from_network_map(&mut channels.try_into().unwrap()); channels .into_iter() .map(|channel| (channel.name.clone(), channel)) @@ -205,13 +203,12 @@ impl crate::message::signalproxy::Network for Network { var.into_iter().map(|v| v.try_into().unwrap()).collect() }, - network_info: NetworkInfo::from_network(input), + network_info: NetworkInfo::from_network_list(input), } } } -#[derive(Debug, Clone, PartialEq, Network)] -#[network(repr = "map")] +#[derive(Debug, Clone, PartialEq, NetworkMap)] pub struct NetworkServer { #[network(rename = "Host")] pub host: String, @@ -239,8 +236,7 @@ pub struct NetworkServer { pub proxy_pass: String, } -#[derive(Debug, Clone, PartialEq, Network)] -#[network(repr = "list")] +#[derive(Debug, Clone, PartialEq, NetworkList)] pub struct NetworkConfig { #[network(rename = "pingTimeoutEnabled")] ping_timeout_enabled: bool, @@ -263,7 +259,6 @@ pub struct NetworkConfig { #[cfg(test)] mod tests { use super::*; - use crate::message::signalproxy::translation::Network; fn networkserver_get_network() -> VariantMap { map! { @@ -325,7 +320,7 @@ mod tests { #[test] fn network_server_to_network() { assert_eq!( - networkserver_get_runtime().to_network(), + networkserver_get_runtime().to_network_map(), networkserver_get_network() ) } diff --git a/src/message/signalproxy/objects/networkinfo.rs b/src/message/signalproxy/objects/networkinfo.rs index 49351ad..23a001d 100644 --- a/src/message/signalproxy/objects/networkinfo.rs +++ b/src/message/signalproxy/objects/networkinfo.rs @@ -1,16 +1,16 @@ use crate::primitive::StringList; -use libquassel_derive::Network; +use libquassel_derive::NetworkList; use crate::message::objects::network::NetworkServer; +use crate::message::signalproxy::translation::NetworkMap; -#[derive(Debug, Clone, PartialEq, Network)] -#[network(repr = "list")] +#[derive(Debug, Clone, PartialEq, NetworkList)] pub struct NetworkInfo { #[network(rename = "networkName")] pub network_name: String, - #[network(rename = "ServerList", network, variant = "VariantList")] + #[network(rename = "ServerList", variant = "VariantList", network, map)] pub server_list: Vec<NetworkServer>, #[network(rename = "perform")] pub perform: StringList, @@ -71,7 +71,7 @@ mod tests { use crate::primitive::{Variant, VariantList}; use super::*; - use crate::message::signalproxy::translation::Network; + use crate::message::signalproxy::translation::NetworkList; use pretty_assertions::assert_eq; @@ -154,11 +154,14 @@ mod tests { #[test] fn networkinfo_to_network() { - assert_eq!(get_runtime().to_network(), get_network()) + assert_eq!(get_runtime().to_network_list(), get_network()) } #[test] fn networkinfo_from_network() { - assert_eq!(NetworkInfo::from_network(&mut get_network()), get_runtime()) + assert_eq!( + NetworkInfo::from_network_list(&mut get_network()), + get_runtime() + ) } } diff --git a/src/message/signalproxy/translation/mod.rs b/src/message/signalproxy/translation/mod.rs index 3587ab6..f6bbbb9 100644 --- a/src/message/signalproxy/translation/mod.rs +++ b/src/message/signalproxy/translation/mod.rs @@ -84,7 +84,7 @@ VariantMap({ }) ``` **/ -use crate::primitive::{VariantList, VariantMap}; +use crate::primitive::VariantList; pub trait Network { type Item; @@ -94,8 +94,10 @@ pub trait Network { } pub trait NetworkMap { - fn to_network_map(&self) -> VariantMap; - fn from_network_map(input: &mut VariantMap) -> Self; + type Item; + + fn to_network_map(&self) -> Self::Item; + fn from_network_map(input: &mut Self::Item) -> Self; } pub trait NetworkList { |
