diff options
| author | Max Audron <audron@cocaine.farm> | 2022-10-06 13:25:55 +0200 |
|---|---|---|
| committer | Max Audron <audron@cocaine.farm> | 2022-10-06 13:27:16 +0200 |
| commit | 45a9f5c3965817536a8c14767de38a39a61ef498 (patch) | |
| tree | ac36bd9655b996f5a2e01d29fe2ee46a7f9ba56e /src/primitive/variant.rs | |
| parent | fix IgnoreListManager (diff) | |
add variant impl for char
Diffstat (limited to 'src/primitive/variant.rs')
| -rw-r--r-- | src/primitive/variant.rs | 22 |
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()]; |
