aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/primitive/variant.rs35
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()
+ );
+ }
}
e/message.rs?id=96369928a757633df543837ffd1e9f537486869b&follow=1'>change IRC MessageType to be a bitflag instead of enumMax Audron-54/+94 2021-07-21fix network objectMax Audron-18/+24 2021-07-21minor docs and cleanupMax Audron-4/+8 2021-04-05WIP: impl more signalproxy objectsMax Audron-1000/+1621 2021-03-09WIP: impl signalproxy typesMax Audron-253/+376 2021-01-21add to and from network deriveMax Audron-42/+2767 2021-01-21reorganize tests and add quassel featuresMax Audron-551/+850 2021-01-04add example program: quasselproxyclientMax Audron-0/+280 2021-01-04random stuffMax Audron-2/+9 2021-01-04add more signalproxy objectsMax Audron-40/+120 2021-01-04add message parsing feature flagsMax Audron-43/+96 2021-01-04fix parsing of datetime when value is -1Max Audron-1/+9 2021-01-02update dependenciesMax Audron-267/+27 2021-01-02rework handshakemessage parsingMax Audron-141/+278 2020-10-16updateMax Audron-1553/+294 2020-10-16update paperworkMax Audron-487/+391