aboutsummaryrefslogtreecommitdiff
path: root/src/message/signalproxy/objects/networkinfo.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/networkinfo.rs
parentremove old quassel attributes from derive macros (diff)
add UserType implementation for required signalproxy objects
Diffstat (limited to 'src/message/signalproxy/objects/networkinfo.rs')
-rw-r--r--src/message/signalproxy/objects/networkinfo.rs25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/message/signalproxy/objects/networkinfo.rs b/src/message/signalproxy/objects/networkinfo.rs
index 4cdf8d7..f81a3e7 100644
--- a/src/message/signalproxy/objects/networkinfo.rs
+++ b/src/message/signalproxy/objects/networkinfo.rs
@@ -1,6 +1,7 @@
use crate::{
- message::{Class, Syncable},
- primitive::{IdentityId, NetworkId, StringList},
+ message::{signalproxy::translation::NetworkMap, Class, Syncable},
+ primitive::{IdentityId, NetworkId, StringList, VariantMap},
+ serialize::{Deserialize, Serialize, UserType},
};
use libquassel_derive::{NetworkList, NetworkMap, Setters};
@@ -71,6 +72,26 @@ pub struct NetworkInfo {
// pub auto_away_active: bool,
}
+impl UserType for NetworkInfo {
+ const NAME: &str = "NetworkInfo";
+}
+
+impl Serialize for NetworkInfo {
+ fn serialize(&self) -> Result<Vec<u8>, crate::ProtocolError> {
+ self.to_network_map().serialize()
+ }
+}
+
+impl Deserialize for NetworkInfo {
+ 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 NetworkInfo {
pub fn set_server_list(&mut self, servers: Vec<NetworkServer>) {
#[cfg(feature = "server")]