aboutsummaryrefslogtreecommitdiff
path: root/src/message/signalproxy/objects/ircchannel.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/message/signalproxy/objects/ircchannel.rs25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/message/signalproxy/objects/ircchannel.rs b/src/message/signalproxy/objects/ircchannel.rs
index 857af51..9ca3474 100644
--- a/src/message/signalproxy/objects/ircchannel.rs
+++ b/src/message/signalproxy/objects/ircchannel.rs
@@ -5,8 +5,9 @@ use libquassel_derive::sync;
use libquassel_derive::{NetworkList, NetworkMap, Setters};
use log::{error, warn};
-use crate::message::{Class, Syncable};
-use crate::primitive::StringList;
+use crate::message::{signalproxy::translation::NetworkMap, Class, Syncable};
+use crate::primitive::{StringList, VariantMap};
+use crate::serialize::{Deserialize, Serialize, UserType};
use super::{ChanModes, ChannelModeType};
@@ -30,6 +31,26 @@ pub struct IrcChannel {
pub encrypted: bool,
}
+impl UserType for IrcChannel {
+ const NAME: &str = "IrcChannel";
+}
+
+impl Serialize for IrcChannel {
+ fn serialize(&self) -> Result<Vec<u8>, crate::ProtocolError> {
+ self.to_network_map().serialize()
+ }
+}
+
+impl Deserialize for IrcChannel {
+ fn parse(b: &[u8]) -> Result<(usize, Self), crate::ProtocolError>
+ where
+ Self: std::marker::Sized,
+ {
+ let (vlen, mut value) = VariantMap::parse(b)?;
+ return Ok((vlen, Self::from_network_map(&mut value)));
+ }
+}
+
// TODO keep user modes sorted
impl IrcChannel {
pub fn add_channel_mode(&mut self, mode_type: ChannelModeType, mode: char, value: String) {