aboutsummaryrefslogtreecommitdiff
path: root/src/message/signalproxy/objects/ircuser.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/message/signalproxy/objects/ircuser.rs
parentremove old quassel attributes from derive macros (diff)
add UserType implementation for required signalproxy objects
Diffstat (limited to 'src/message/signalproxy/objects/ircuser.rs')
-rw-r--r--src/message/signalproxy/objects/ircuser.rs25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/message/signalproxy/objects/ircuser.rs b/src/message/signalproxy/objects/ircuser.rs
index c522c13..1969793 100644
--- a/src/message/signalproxy/objects/ircuser.rs
+++ b/src/message/signalproxy/objects/ircuser.rs
@@ -1,6 +1,7 @@
use crate::{
- message::{Class, Syncable},
- primitive::{DateTime, StringList},
+ message::{Class, NetworkMap, Syncable},
+ primitive::{DateTime, StringList, VariantMap},
+ serialize::{Deserialize, Serialize, UserType},
};
use itertools::Itertools;
@@ -42,6 +43,26 @@ pub struct IrcUser {
pub user_modes: String,
}
+impl UserType for IrcUser {
+ const NAME: &str = "IrcUser";
+}
+
+impl Serialize for IrcUser {
+ fn serialize(&self) -> Result<Vec<u8>, crate::ProtocolError> {
+ self.to_network_map().serialize()
+ }
+}
+
+impl Deserialize for IrcUser {
+ 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)));
+ }
+}
+
impl IrcUser {
pub fn add_user_modes(&mut self, modes: String) {
for mode in modes.chars() {