aboutsummaryrefslogtreecommitdiff
path: root/src/message/signalproxy/objects/aliasmanager.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/message/signalproxy/objects/aliasmanager.rs')
-rw-r--r--src/message/signalproxy/objects/aliasmanager.rs131
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())