diff options
Diffstat (limited to 'src/message/signalproxy/objects/aliasmanager.rs')
| -rw-r--r-- | src/message/signalproxy/objects/aliasmanager.rs | 131 |
1 files changed, 39 insertions, 92 deletions
diff --git a/src/message/signalproxy/objects/aliasmanager.rs b/src/message/signalproxy/objects/aliasmanager.rs index 093163b..b536cde 100644 --- a/src/message/signalproxy/objects/aliasmanager.rs +++ b/src/message/signalproxy/objects/aliasmanager.rs @@ -1,93 +1,27 @@ -use crate::primitive::{StringList, Variant, VariantMap}; +use libquassel_derive::Network; -use crate::message::signalproxy::Network; - -#[derive(Clone, Debug, std::cmp::PartialEq)] +#[derive(Clone, Debug, std::cmp::PartialEq, Network)] +#[network(repr = "list")] pub struct AliasManager { + #[network(rename = "Aliases", variant = "VariantMap", network)] pub aliases: Vec<Alias>, } -#[derive(Clone, Debug, std::cmp::PartialEq)] +#[derive(Clone, Debug, std::cmp::PartialEq, Network)] +#[network(repr = "maplist")] pub struct Alias { + #[network(rename = "names", variant = "StringList")] name: String, + #[network(rename = "expansions", variant = "StringList")] expansion: String, } -impl Alias { - fn from_network_internal(input: &VariantMap) -> Vec<Self> { - let names = match_variant!(input.get("names").unwrap(), Variant::StringList); - let expansions = match_variant!(input.get("expansions").unwrap(), Variant::StringList); - - return names - .iter() - .zip(expansions) - .map(|(name, expansion)| Alias { - name: name.clone(), - expansion, - }) - .collect(); - } -} - -impl Network for Alias { - type Item = VariantMap; - - fn to_network(&self) -> Self::Item { - let mut map = VariantMap::new(); - map.insert(s!("names"), Variant::StringList(vec![self.name.clone()])); - map.insert( - s!("expansions"), - Variant::StringList(vec![self.expansion.clone()]), - ); - - return map; - } - - fn from_network(input: &mut Self::Item) -> Self { - Alias::from_network_internal(&input)[0].clone() - } -} - -impl Network for AliasManager { - type Item = VariantMap; - - fn to_network(&self) -> Self::Item { - let (names, expansions) = self.aliases.iter().fold( - (StringList::new(), StringList::new()), - |(mut names, mut expansions), alias| { - names.push(alias.name.clone()); - expansions.push(alias.expansion.clone()); - return (names, expansions); - }, - ); - - let mut map = VariantMap::new(); - map.insert(s!("names"), Variant::StringList(names)); - map.insert(s!("expansions"), Variant::StringList(expansions)); - - return map; - } - - fn from_network(input: &mut Self::Item) -> Self { - let names = match_variant!(input.get("names").unwrap(), Variant::StringList); - let expansions = match_variant!(input.get("expansions").unwrap(), Variant::StringList); - - AliasManager { - aliases: names - .iter() - .zip(expansions) - .map(|(name, expansion)| Alias { - name: name.clone(), - expansion, - }) - .collect(), - } - } -} - #[cfg(test)] mod tests { use super::*; + use crate::message::signalproxy::translation::Network; + + use crate::primitive::{Variant, VariantList}; fn get_src() -> AliasManager { AliasManager { @@ -104,23 +38,36 @@ mod tests { } } - fn get_dest() -> VariantMap { - map! { - s!("names") => Variant::StringList( - vec![ - s!("j"), - s!("ns"), - ], - ), - s!("expansions") => Variant::StringList( - vec![ - s!("/join $0"), - s!("/msg nickserv $0"), - ], - ), - } + fn get_dest() -> VariantList { + vec![ + Variant::ByteArray(s!("Aliases")), + Variant::VariantMap(map! { + s!("names") => Variant::StringList( + vec![ + s!("j"), + s!("ns"), + ], + ), + s!("expansions") => Variant::StringList( + vec![ + s!("/join $0"), + s!("/msg nickserv $0"), + ], + ), + }), + ] } + // #[bench] + // fn alias_to_network(b: &mut test::Bencher) { + // b.iter(|| test::black_box(get_src()).to_network()) + // } + + // #[bench] + // fn alias_from_network(b: &mut test::Bencher) { + // b.iter(|| AliasManager::from_network(&mut test::black_box(get_dest()))) + // } + #[test] fn aliasmanager_to_network() { assert_eq!(get_src().to_network(), get_dest()) |
