aboutsummaryrefslogtreecommitdiff
path: root/src/primitive/variant.rs
diff options
context:
space:
mode:
authorMax Audron <audron@cocaine.farm>2025-03-01 20:00:02 +0100
committerMax Audron <audron@cocaine.farm>2025-03-01 20:00:02 +0100
commit8447b54b6309cf5ca75ffe101088a833d3b34b1e (patch)
treead8338ad989c8d994a36f9760eaa17fa16abcfef /src/primitive/variant.rs
parentremove old quassel attributes from derive macros (diff)
add UserType implementation for required signalproxy objects
Diffstat (limited to 'src/primitive/variant.rs')
-rw-r--r--src/primitive/variant.rs24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/primitive/variant.rs b/src/primitive/variant.rs
index 903f77c..8a1c777 100644
--- a/src/primitive/variant.rs
+++ b/src/primitive/variant.rs
@@ -1,9 +1,10 @@
use std::{collections::HashMap, vec::Vec};
use itertools::Itertools;
-use log::{debug, error, trace};
+use log::{error, trace};
use crate::error::ProtocolError;
+use crate::message::objects::{Identity, IrcChannel, IrcUser, NetworkInfo, NetworkServer};
use crate::primitive::{self, NetworkId, PeerPtr};
use crate::primitive::{IdentityId, StringList};
use crate::serialize::*;
@@ -29,9 +30,14 @@ pub enum Variant {
BufferId(BufferId),
BufferInfo(BufferInfo),
IdentityId(IdentityId),
+ IrcUser(IrcUser),
+ IrcChannel(IrcChannel),
+ Identity(Identity),
Message(Message),
MsgId(MsgId),
NetworkId(NetworkId),
+ NetworkInfo(NetworkInfo),
+ NetworkServer(NetworkServer),
Time(Time),
Date(Date),
DateTime(DateTime),
@@ -200,6 +206,11 @@ impl Serialize for Variant {
Variant::DateTime(v) => v.serialize_variant(),
Variant::Time(v) => v.serialize_variant(),
Variant::Date(v) => v.serialize_variant(),
+ Variant::IrcUser(v) => v.serialize_variant(),
+ Variant::IrcChannel(v) => v.serialize_variant(),
+ Variant::Identity(v) => v.serialize_variant(),
+ Variant::NetworkInfo(v) => v.serialize_variant(),
+ Variant::NetworkServer(v) => v.serialize_variant(),
}
}
}
@@ -246,12 +257,11 @@ impl Deserialize for Variant {
// Match Possible User Types to basic structures
match user_type.as_str() {
BufferId::NAME => BufferId::parse_variant(b, len + user_type_len),
- // As VariantMap
- "IrcUser" | "IrcChannel" | "Identity" | "NetworkInfo" | "Network::Server" => {
- let (vlen, value) = VariantMap::parse(&b[(len + user_type_len)..])?;
- debug!(target: "primitive::Variant", "UserType is VariantMap {:?}", value);
- return Ok((len + user_type_len + vlen, Variant::VariantMap(value)));
- }
+ IrcUser::NAME => IrcUser::parse_variant(b, len + user_type_len),
+ IrcChannel::NAME => IrcChannel::parse_variant(b, len + user_type_len),
+ Identity::NAME => Identity::parse_variant(b, len + user_type_len),
+ NetworkInfo::NAME => NetworkInfo::parse_variant(b, len + user_type_len),
+ NetworkServer::NAME => NetworkServer::parse_variant(b, len + user_type_len),
NetworkId::NAME => NetworkId::parse_variant(b, len + user_type_len),
IdentityId::NAME => IdentityId::parse_variant(b, len + user_type_len),
PeerPtr::NAME => PeerPtr::parse_variant(b, len + user_type_len),