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.rs89
1 files changed, 55 insertions, 34 deletions
diff --git a/src/message/signalproxy/objects/aliasmanager.rs b/src/message/signalproxy/objects/aliasmanager.rs
index b816778..093163b 100644
--- a/src/message/signalproxy/objects/aliasmanager.rs
+++ b/src/message/signalproxy/objects/aliasmanager.rs
@@ -1,4 +1,4 @@
-use crate::primitive::{StringList, Variant, VariantList, VariantMap};
+use crate::primitive::{StringList, Variant, VariantMap};
use crate::message::signalproxy::Network;
@@ -13,14 +13,45 @@ pub struct Alias {
expansion: String,
}
-impl Network for AliasManager {
- type Item = VariantList;
+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()]),
+ );
- fn to_network(&self) -> VariantList {
- let mut res = VariantList::new();
+ return map;
+ }
- res.push(Variant::ByteArray(s!("Aliases")));
+ 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| {
@@ -34,17 +65,10 @@ impl Network for AliasManager {
map.insert(s!("names"), Variant::StringList(names));
map.insert(s!("expansions"), Variant::StringList(expansions));
- res.push(Variant::VariantMap(map));
-
- return res;
+ return map;
}
- fn from_network(input: crate::primitive::VariantList) -> Self {
- let input = match &input[1] {
- Variant::VariantMap(input) => input,
- _ => unimplemented!(),
- };
-
+ 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);
@@ -80,24 +104,21 @@ mod tests {
}
}
- 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"),
- ],
- ),
- }),
- ]
+ 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"),
+ ],
+ ),
+ }
}
#[test]
@@ -107,7 +128,7 @@ mod tests {
#[test]
fn aliasmanager_from_network() {
- assert_eq!(AliasManager::from_network(get_dest()), get_src())
+ assert_eq!(AliasManager::from_network(&mut get_dest()), get_src())
}
}