diff options
| author | Tobias Deiminger <tdmg@linutronix.de> | 2024-04-16 22:06:43 +0200 |
|---|---|---|
| committer | Max Audron <audron@cocaine.farm> | 2025-02-25 00:10:43 +0100 |
| commit | e3a9749a256ff66fdc7a840cd80bc6358664c01f (patch) | |
| tree | b15f31514e77f32adb4fd2a8ee11284b200208d6 | |
| parent | Add BufferId as Rust type (diff) | |
Use BufferId in Variant
| -rw-r--r-- | src/primitive/variant.rs | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/src/primitive/variant.rs b/src/primitive/variant.rs index 22ac56a..6abeba3 100644 --- a/src/primitive/variant.rs +++ b/src/primitive/variant.rs @@ -8,7 +8,7 @@ use crate::primitive; use crate::primitive::StringList; use crate::{deserialize::*, serialize::*}; -use crate::primitive::{BufferInfo, Date, DateTime, Message, MsgId, Time, VariantList, VariantMap}; +use crate::primitive::{BufferId, BufferInfo, Date, DateTime, Message, MsgId, Time, VariantList, VariantMap}; use libquassel_derive::From; @@ -26,6 +26,7 @@ pub enum Variant { Unknown, #[from(ignore)] UserType(String, Vec<u8>), + BufferId(BufferId), BufferInfo(BufferInfo), Message(Message), MsgId(MsgId), @@ -244,6 +245,11 @@ impl Serialize for Variant { res.append(&mut name.serialize_utf8()?); res.extend(bytes); } + Variant::BufferId(v) => { + let bytes = BufferId::serialize(v)?; + let user = Variant::UserType("BufferId".to_string(), bytes); + return Variant::serialize(&user); + } Variant::BufferInfo(v) => { let bytes = BufferInfo::serialize(v)?; let user = Variant::UserType("BufferInfo".to_string(), bytes); @@ -382,6 +388,11 @@ impl Deserialize for Variant { // TODO implement all these types // Match Possible User Types to basic structures match user_type.as_str() { + "BufferId" => { + trace!(target: "primitive::Variant", "UserType is BufferId"); + let (vlen, value) = BufferId::parse(&b[(len + user_type_len)..])?; + return Ok((len + user_type_len + vlen, Variant::BufferId(value))); + } // As VariantMap "IrcUser" | "IrcChannel" | "Identity" | "NetworkInfo" | "Network::Server" => { trace!(target: "primitive::Variant", "UserType is VariantMap"); @@ -389,7 +400,7 @@ impl Deserialize for Variant { return Ok((len + user_type_len + vlen, Variant::VariantMap(value))); } // As i32 - "BufferId" | "IdentityId" | "NetworkId" => { + "IdentityId" | "NetworkId" => { trace!(target: "primitive::Variant", "UserType is i32"); let (vlen, value) = i32::parse(&b[(len + user_type_len)..])?; @@ -781,4 +792,24 @@ mod tests { Variant::parse(&test_bytes).unwrap() ); } + + #[test] + fn bufferid_serialize() { + let test_buffer_id = Variant::BufferId(BufferId(1)); + assert_eq!( + test_buffer_id.serialize().unwrap(), + [0, 0, 0, 127, 0, 0, 0, 0, 8, 66, 117, 102, 102, 101, 114, 73, 100, 0, 0, 0, 1] + ); + } + + #[test] + fn bufferid_deserialize() { + let test_bytes = vec![ + 0, 0, 0, 127, 0, 0, 0, 0, 8, 66, 117, 102, 102, 101, 114, 73, 100, 0, 0, 0, 1 + ]; + assert_eq!( + (test_bytes.len(), Variant::BufferId(BufferId(1))), + Variant::parse(&test_bytes).unwrap() + ); + } } |
