serde_avro_bytes/avro_bytes/de/
bytes.rs

1use serde::de::{Error, SeqAccess, Visitor};
2use serde::Deserializer;
3use std::fmt::Formatter;
4
5#[allow(unused)]
6pub fn deserialize_bytes<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>
7where
8    D: Deserializer<'de>,
9{
10    let visitor = BytesVisitor;
11    deserializer.deserialize_bytes(visitor)
12}
13
14#[allow(unused)]
15pub fn deserialize_option_bytes<'de, D>(deserializer: D) -> Result<Option<Vec<u8>>, D::Error>
16where
17    D: Deserializer<'de>,
18{
19    let visitor = OptionBytesVisitor;
20    deserializer.deserialize_option(visitor)
21}
22
23pub struct BytesVisitor;
24
25impl<'de> Visitor<'de> for BytesVisitor {
26    type Value = Vec<u8>;
27
28    fn expecting(&self, formatter: &mut Formatter) -> std::fmt::Result {
29        write!(formatter, "Unable to decode bytes")
30    }
31
32    fn visit_bytes<E>(self, v: &[u8]) -> Result<Self::Value, E>
33    where
34        E: Error,
35    {
36        Ok(v.to_vec())
37    }
38
39    fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
40    where
41        A: SeqAccess<'de>,
42    {
43        let mut data = vec![];
44        while let Some(x) = seq.next_element()? {
45            data.push(x);
46        }
47        Ok(data)
48    }
49}
50
51struct OptionBytesVisitor;
52
53impl<'de> Visitor<'de> for OptionBytesVisitor {
54    type Value = Option<Vec<u8>>;
55
56    fn expecting(&self, formatter: &mut Formatter) -> std::fmt::Result {
57        write!(formatter, "Unable to decode option of bytes")
58    }
59
60    fn visit_none<E>(self) -> Result<Self::Value, E>
61    where
62        E: Error,
63    {
64        Ok(None)
65    }
66
67    fn visit_some<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
68    where
69        D: Deserializer<'de>,
70    {
71        Ok(Some(deserialize_bytes(deserializer)?))
72    }
73}