aboutsummaryrefslogtreecommitdiff
path: root/src/primitive/variant.rs
diff options
context:
space:
mode:
authorMax Audron <audron@cocaine.farm>2022-10-06 13:25:55 +0200
committerMax Audron <audron@cocaine.farm>2022-10-06 13:27:16 +0200
commit45a9f5c3965817536a8c14767de38a39a61ef498 (patch)
treeac36bd9655b996f5a2e01d29fe2ee46a7f9ba56e /src/primitive/variant.rs
parentfix IgnoreListManager (diff)
add variant impl for char
Diffstat (limited to 'src/primitive/variant.rs')
-rw-r--r--src/primitive/variant.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/primitive/variant.rs b/src/primitive/variant.rs
index 3b41b7b..833df25 100644
--- a/src/primitive/variant.rs
+++ b/src/primitive/variant.rs
@@ -40,6 +40,7 @@ pub enum Variant {
#[from(ignore)]
ByteArray(String),
StringList(StringList),
+ char(char),
bool(bool),
u64(u64),
u32(u32),
@@ -204,6 +205,11 @@ impl Serialize for Variant {
res.extend(unknown.to_be_bytes().iter());
res.extend(v.serialize()?.iter());
}
+ Variant::char(v) => {
+ res.extend(primitive::QCHAR.to_be_bytes().iter());
+ res.extend(unknown.to_be_bytes().iter());
+ res.extend(v.serialize()?.iter());
+ }
Variant::String(v) => {
res.extend(primitive::QSTRING.to_be_bytes().iter());
res.extend(unknown.to_be_bytes().iter());
@@ -304,6 +310,7 @@ impl Serialize for Variant {
impl Deserialize for Variant {
fn parse(b: &[u8]) -> Result<(usize, Self), Error> {
+ trace!("trying to parse variant with bytes: {:?}", b);
let (_, qtype) = i32::parse(&b[0..4])?;
let qtype = qtype as u32;
@@ -322,6 +329,11 @@ impl Deserialize for Variant {
let (vlen, value) = VariantList::parse(&b[len..])?;
return Ok((len + vlen, Variant::VariantList(value)));
}
+ primitive::QCHAR => {
+ trace!(target: "primitive::Variant", "Parsing Variant: Char");
+ let (vlen, value) = char::parse(&b[len..])?;
+ return Ok((len + vlen, Variant::char(value)));
+ }
primitive::QSTRING => {
trace!(target: "primitive::Variant", "Parsing Variant: String");
let (vlen, value) = String::parse(&b[len..])?;
@@ -655,6 +667,16 @@ mod tests {
}
#[test]
+ fn char_serialize() {
+ assert_eq!(Variant::char('z').serialize().unwrap(), [0, 0, 0, 7, 0, 0, 122]);
+ }
+
+ #[test]
+ fn char_deserialize() {
+ assert_eq!((7, Variant::char('z')), Variant::parse(&[0, 0, 0, 7, 0, 0, 122]).unwrap());
+ }
+
+ #[test]
fn strings_serialize() {
let test_string = "This is a Test!1!!".to_string();
let test_string_list = vec!["test1".to_string(), "test 2".to_string()];