serde_avro_bytes/avro_bytes/de/
bytes.rs1use 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}