1use bytes::Bytes;
2use serde::de;
3use tobu_format::{
4 error::DecodeError,
5 wire::{Parser, WireField},
6};
7
8use crate::error::Error;
9
10pub struct Deserializer {
11 parser: Parser,
12 field: WireField,
13}
14
15impl Deserializer {
16 pub fn new(buf: Bytes) -> Result<Self, Error> {
17 let mut parser = Parser::new(buf);
18 let field = parser.next().unwrap_or(Err(DecodeError::Eof))?;
19 Ok(Deserializer { parser, field })
20 }
21
22 fn next(&mut self) -> Result<(), Error> {
23 self.field = self.parser.next().unwrap_or(Err(DecodeError::Eof))?;
24 Ok(())
25 }
26}
27
28impl<'de, 'r> de::Deserializer<'de> for &'r mut Deserializer {
29 type Error = Error;
30
31 fn deserialize_any<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
32 where
33 V: de::Visitor<'de>,
34 {
35 todo!()
36 }
37
38 fn deserialize_bool<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
39 where
40 V: de::Visitor<'de>,
41 {
42 todo!()
43 }
44
45 fn deserialize_i8<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
46 where
47 V: de::Visitor<'de>,
48 {
49 todo!()
50 }
51
52 fn deserialize_i16<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
53 where
54 V: de::Visitor<'de>,
55 {
56 todo!()
57 }
58
59 fn deserialize_i32<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
60 where
61 V: de::Visitor<'de>,
62 {
63 todo!()
64 }
65
66 fn deserialize_i64<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
67 where
68 V: de::Visitor<'de>,
69 {
70 todo!()
71 }
72
73 fn deserialize_u8<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
74 where
75 V: de::Visitor<'de>,
76 {
77 todo!()
78 }
79
80 fn deserialize_u16<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
81 where
82 V: de::Visitor<'de>,
83 {
84 todo!()
85 }
86
87 fn deserialize_u32<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
88 where
89 V: de::Visitor<'de>,
90 {
91 todo!()
92 }
93
94 fn deserialize_u64<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
95 where
96 V: de::Visitor<'de>,
97 {
98 todo!()
99 }
100
101 fn deserialize_f32<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
102 where
103 V: de::Visitor<'de>,
104 {
105 todo!()
106 }
107
108 fn deserialize_f64<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
109 where
110 V: de::Visitor<'de>,
111 {
112 todo!()
113 }
114
115 fn deserialize_char<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
116 where
117 V: de::Visitor<'de>,
118 {
119 todo!()
120 }
121
122 fn deserialize_str<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
123 where
124 V: de::Visitor<'de>,
125 {
126 todo!()
127 }
128
129 fn deserialize_string<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
130 where
131 V: de::Visitor<'de>,
132 {
133 todo!()
134 }
135
136 fn deserialize_bytes<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
137 where
138 V: de::Visitor<'de>,
139 {
140 todo!()
141 }
142
143 fn deserialize_byte_buf<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
144 where
145 V: de::Visitor<'de>,
146 {
147 todo!()
148 }
149
150 fn deserialize_option<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
151 where
152 V: de::Visitor<'de>,
153 {
154 todo!()
155 }
156
157 fn deserialize_unit<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
158 where
159 V: de::Visitor<'de>,
160 {
161 todo!()
162 }
163
164 fn deserialize_unit_struct<V>(
165 self,
166 _name: &'static str,
167 _visitor: V,
168 ) -> Result<V::Value, Self::Error>
169 where
170 V: de::Visitor<'de>,
171 {
172 todo!()
173 }
174
175 fn deserialize_newtype_struct<V>(
176 self,
177 _name: &'static str,
178 _visitor: V,
179 ) -> Result<V::Value, Self::Error>
180 where
181 V: de::Visitor<'de>,
182 {
183 todo!()
184 }
185
186 fn deserialize_seq<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
187 where
188 V: de::Visitor<'de>,
189 {
190 todo!()
191 }
192
193 fn deserialize_tuple<V>(self, _len: usize, _visitor: V) -> Result<V::Value, Self::Error>
194 where
195 V: de::Visitor<'de>,
196 {
197 todo!()
198 }
199
200 fn deserialize_tuple_struct<V>(
201 self,
202 _name: &'static str,
203 _len: usize,
204 _visitor: V,
205 ) -> Result<V::Value, Self::Error>
206 where
207 V: de::Visitor<'de>,
208 {
209 todo!()
210 }
211
212 fn deserialize_map<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
213 where
214 V: de::Visitor<'de>,
215 {
216 todo!()
217 }
218
219 fn deserialize_struct<V>(
220 self,
221 _name: &'static str,
222 _fields: &'static [&'static str],
223 visitor: V,
224 ) -> Result<V::Value, Self::Error>
225 where
226 V: de::Visitor<'de>,
227 {
228 let mut map = MapAccess { de: self };
229 visitor.visit_map(&mut map)
230 }
231
232 fn deserialize_enum<V>(
233 self,
234 _name: &'static str,
235 _variants: &'static [&'static str],
236 _visitor: V,
237 ) -> Result<V::Value, Self::Error>
238 where
239 V: de::Visitor<'de>,
240 {
241 todo!()
242 }
243
244 fn deserialize_identifier<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
245 where
246 V: de::Visitor<'de>,
247 {
248 todo!()
249 }
250
251 fn deserialize_ignored_any<V>(self, _visitor: V) -> Result<V::Value, Self::Error>
252 where
253 V: de::Visitor<'de>,
254 {
255 todo!()
256 }
257}
258
259struct MapAccess<'r> {
260 de: &'r mut Deserializer,
261}
262
263impl<'de, 'r> de::MapAccess<'de> for MapAccess<'r> {
264 type Error = Error;
265
266 fn next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>, Self::Error>
267 where
268 K: de::DeserializeSeed<'de>,
269 {
270 seed.deserialize(&mut *self.de).map(Some)
271 }
272
273 fn next_value_seed<V>(&mut self, seed: V) -> Result<V::Value, Self::Error>
274 where
275 V: de::DeserializeSeed<'de>,
276 {
277 seed.deserialize(&mut *self.de)
278 }
279}