aboutsummaryrefslogtreecommitdiff
path: root/src/primitive/variant.rs
diff options
context:
space:
mode:
authorMax Audron <audron@cocaine.farm>2021-01-04 18:22:47 +0100
committerMax Audron <audron@cocaine.farm>2021-01-04 18:23:20 +0100
commit2207285cb51ac8917545a05cafdb6765fdde17e6 (patch)
tree0758b640ff2a1e75ea9e404fda697a3240ee9868 /src/primitive/variant.rs
parentfix parsing of datetime when value is -1 (diff)
add message parsing feature flags
Diffstat (limited to '')
-rw-r--r--src/primitive/variant.rs25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/primitive/variant.rs b/src/primitive/variant.rs
index 9242d90..be2bebe 100644
--- a/src/primitive/variant.rs
+++ b/src/primitive/variant.rs
@@ -36,6 +36,7 @@ pub enum Variant {
VariantList(VariantList),
String(String),
StringUTF8(String),
+ ByteArray(String),
StringList(StringList),
bool(bool),
u64(u64),
@@ -77,6 +78,11 @@ impl Serialize for Variant {
res.extend(unknown.to_be_bytes().iter());
res.extend(v.serialize_utf8()?.iter());
}
+ Variant::ByteArray(v) => {
+ res.extend(primitive::QBYTEARRAY.to_be_bytes().iter());
+ res.extend(unknown.to_be_bytes().iter());
+ res.extend(v.serialize_utf8()?.iter());
+ }
Variant::StringList(v) => {
res.extend(primitive::QSTRINGLIST.to_be_bytes().iter());
res.extend(unknown.to_be_bytes().iter());
@@ -201,8 +207,7 @@ impl Deserialize for Variant {
return Ok((len + vlen, Variant::StringList(value.clone())));
}
primitive::QDATETIME => {
- trace!(target: "primitive::Variant", "Parsing Variant: Date");
- // let (vlen, value) = DateTime::parse(&b[len..])?;
+ trace!(target: "primitive::Variant", "Parsing Variant: DateTime");
let (vlen, value): (usize, DateTime) = Deserialize::parse(&b[len..])?;
return Ok((len + vlen, Variant::DateTime(value.clone())));
}
@@ -269,12 +274,26 @@ impl Deserialize for Variant {
return Ok((len + user_type_len + vlen, Variant::VariantMap(value)));
}
// As i32
- "BufferId" | "IdentityId" | "NetworkId" | "MsgId" => {
+ "BufferId" | "IdentityId" | "NetworkId" => {
trace!(target: "primitive::Variant", "UserType is i32");
let (vlen, value) = i32::parse(&b[(len + user_type_len)..])?;
return Ok((len + user_type_len + vlen, Variant::i32(value)));
}
+ #[cfg(not(feature = "long-message-id"))]
+ "MsgId" => {
+ trace!(target: "primitive::Variant", "UserType is i32");
+
+ let (vlen, value) = i32::parse(&b[(len + user_type_len)..])?;
+ return Ok((len + user_type_len + vlen, Variant::i32(value)));
+ }
+ #[cfg(feature = "long-message-id")]
+ "MsgId" => {
+ trace!(target: "primitive::Variant", "UserType is i64");
+
+ let (vlen, value) = i64::parse(&b[(len + user_type_len)..])?;
+ return Ok((len + user_type_len + vlen, Variant::i64(value)));
+ }
// As i64
"PeerPtr" => {
trace!(target: "primitive::Variant", "UserType is i64");