diff options
Diffstat (limited to 'src/message/signalproxy/objects/ircuser.rs')
| -rw-r--r-- | src/message/signalproxy/objects/ircuser.rs | 25 |
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() { |
