1 use crate::error::Error;
2 use crate::token::Token;
3 use serde::de::value::{MapAccessDeserializer, SeqAccessDeserializer};
4 use serde::de::{
5     self, Deserialize, DeserializeSeed, EnumAccess, IntoDeserializer, MapAccess, SeqAccess,
6     VariantAccess, Visitor,
7 };
8 use serde::forward_to_deserialize_any;
9 
10 #[derive(Debug)]
11 pub struct Deserializer<'de> {
12     tokens: &'de [Token],
13 }
14 
assert_next_token(de: &mut Deserializer, expected: Token) -> Result<(), Error>15 fn assert_next_token(de: &mut Deserializer, expected: Token) -> Result<(), Error> {
16     match de.next_token_opt() {
17         Some(token) if token == expected => Ok(()),
18         Some(other) => Err(de::Error::custom(format!(
19             "expected Token::{} but deserialization wants Token::{}",
20             other, expected,
21         ))),
22         None => Err(de::Error::custom(format!(
23             "end of tokens but deserialization wants Token::{}",
24             expected,
25         ))),
26     }
27 }
28 
unexpected(token: Token) -> Error29 fn unexpected(token: Token) -> Error {
30     de::Error::custom(format!(
31         "deserialization did not expect this token: {}",
32         token,
33     ))
34 }
35 
end_of_tokens() -> Error36 fn end_of_tokens() -> Error {
37     de::Error::custom("ran out of tokens to deserialize")
38 }
39 
40 impl<'de> Deserializer<'de> {
new(tokens: &'de [Token]) -> Self41     pub fn new(tokens: &'de [Token]) -> Self {
42         Deserializer { tokens }
43     }
44 
peek_token_opt(&self) -> Option<Token>45     fn peek_token_opt(&self) -> Option<Token> {
46         self.tokens.first().copied()
47     }
48 
peek_token(&self) -> Result<Token, Error>49     fn peek_token(&self) -> Result<Token, Error> {
50         self.peek_token_opt().ok_or_else(end_of_tokens)
51     }
52 
next_token_opt(&mut self) -> Option<Token>53     pub fn next_token_opt(&mut self) -> Option<Token> {
54         match self.tokens.split_first() {
55             Some((&first, rest)) => {
56                 self.tokens = rest;
57                 Some(first)
58             }
59             None => None,
60         }
61     }
62 
next_token(&mut self) -> Result<Token, Error>63     fn next_token(&mut self) -> Result<Token, Error> {
64         let (&first, rest) = self.tokens.split_first().ok_or_else(end_of_tokens)?;
65         self.tokens = rest;
66         Ok(first)
67     }
68 
remaining(&self) -> usize69     pub fn remaining(&self) -> usize {
70         self.tokens.len()
71     }
72 
visit_seq<V>( &mut self, len: Option<usize>, end: Token, visitor: V, ) -> Result<V::Value, Error> where V: Visitor<'de>,73     fn visit_seq<V>(
74         &mut self,
75         len: Option<usize>,
76         end: Token,
77         visitor: V,
78     ) -> Result<V::Value, Error>
79     where
80         V: Visitor<'de>,
81     {
82         let value = visitor.visit_seq(DeserializerSeqVisitor { de: self, len, end })?;
83         assert_next_token(self, end)?;
84         Ok(value)
85     }
86 
visit_map<V>( &mut self, len: Option<usize>, end: Token, visitor: V, ) -> Result<V::Value, Error> where V: Visitor<'de>,87     fn visit_map<V>(
88         &mut self,
89         len: Option<usize>,
90         end: Token,
91         visitor: V,
92     ) -> Result<V::Value, Error>
93     where
94         V: Visitor<'de>,
95     {
96         let value = visitor.visit_map(DeserializerMapVisitor { de: self, len, end })?;
97         assert_next_token(self, end)?;
98         Ok(value)
99     }
100 }
101 
102 impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
103     type Error = Error;
104 
105     forward_to_deserialize_any! {
106         bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
107         bytes byte_buf unit seq map identifier ignored_any
108     }
109 
deserialize_any<V>(self, visitor: V) -> Result<V::Value, Error> where V: Visitor<'de>,110     fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Error>
111     where
112         V: Visitor<'de>,
113     {
114         let token = self.next_token()?;
115         match token {
116             Token::Bool(v) => visitor.visit_bool(v),
117             Token::I8(v) => visitor.visit_i8(v),
118             Token::I16(v) => visitor.visit_i16(v),
119             Token::I32(v) => visitor.visit_i32(v),
120             Token::I64(v) => visitor.visit_i64(v),
121             Token::U8(v) => visitor.visit_u8(v),
122             Token::U16(v) => visitor.visit_u16(v),
123             Token::U32(v) => visitor.visit_u32(v),
124             Token::U64(v) => visitor.visit_u64(v),
125             Token::F32(v) => visitor.visit_f32(v),
126             Token::F64(v) => visitor.visit_f64(v),
127             Token::Char(v) => visitor.visit_char(v),
128             Token::Str(v) => visitor.visit_str(v),
129             Token::BorrowedStr(v) => visitor.visit_borrowed_str(v),
130             Token::String(v) => visitor.visit_string(v.to_owned()),
131             Token::Bytes(v) => visitor.visit_bytes(v),
132             Token::BorrowedBytes(v) => visitor.visit_borrowed_bytes(v),
133             Token::ByteBuf(v) => visitor.visit_byte_buf(v.to_vec()),
134             Token::None => visitor.visit_none(),
135             Token::Some => visitor.visit_some(self),
136             Token::Unit | Token::UnitStruct { .. } => visitor.visit_unit(),
137             Token::NewtypeStruct { .. } => visitor.visit_newtype_struct(self),
138             Token::Seq { len } => self.visit_seq(len, Token::SeqEnd, visitor),
139             Token::Tuple { len } => self.visit_seq(Some(len), Token::TupleEnd, visitor),
140             Token::TupleStruct { len, .. } => {
141                 self.visit_seq(Some(len), Token::TupleStructEnd, visitor)
142             }
143             Token::Map { len } => self.visit_map(len, Token::MapEnd, visitor),
144             Token::Struct { len, .. } => self.visit_map(Some(len), Token::StructEnd, visitor),
145             Token::Enum { .. } => {
146                 let variant = self.next_token()?;
147                 let next = self.peek_token()?;
148                 match (variant, next) {
149                     (Token::Str(variant), Token::Unit) => {
150                         self.next_token()?;
151                         visitor.visit_str(variant)
152                     }
153                     (Token::BorrowedStr(variant), Token::Unit) => {
154                         self.next_token()?;
155                         visitor.visit_borrowed_str(variant)
156                     }
157                     (Token::String(variant), Token::Unit) => {
158                         self.next_token()?;
159                         visitor.visit_string(variant.to_string())
160                     }
161                     (Token::Bytes(variant), Token::Unit) => {
162                         self.next_token()?;
163                         visitor.visit_bytes(variant)
164                     }
165                     (Token::BorrowedBytes(variant), Token::Unit) => {
166                         self.next_token()?;
167                         visitor.visit_borrowed_bytes(variant)
168                     }
169                     (Token::ByteBuf(variant), Token::Unit) => {
170                         self.next_token()?;
171                         visitor.visit_byte_buf(variant.to_vec())
172                     }
173                     (Token::U8(variant), Token::Unit) => {
174                         self.next_token()?;
175                         visitor.visit_u8(variant)
176                     }
177                     (Token::U16(variant), Token::Unit) => {
178                         self.next_token()?;
179                         visitor.visit_u16(variant)
180                     }
181                     (Token::U32(variant), Token::Unit) => {
182                         self.next_token()?;
183                         visitor.visit_u32(variant)
184                     }
185                     (Token::U64(variant), Token::Unit) => {
186                         self.next_token()?;
187                         visitor.visit_u64(variant)
188                     }
189                     (variant, Token::Unit) => Err(unexpected(variant)),
190                     (variant, _) => {
191                         visitor.visit_map(EnumMapVisitor::new(self, variant, EnumFormat::Any))
192                     }
193                 }
194             }
195             Token::UnitVariant { variant, .. } => visitor.visit_str(variant),
196             Token::NewtypeVariant { variant, .. } => visitor.visit_map(EnumMapVisitor::new(
197                 self,
198                 Token::Str(variant),
199                 EnumFormat::Any,
200             )),
201             Token::TupleVariant { variant, .. } => visitor.visit_map(EnumMapVisitor::new(
202                 self,
203                 Token::Str(variant),
204                 EnumFormat::Seq,
205             )),
206             Token::StructVariant { variant, .. } => visitor.visit_map(EnumMapVisitor::new(
207                 self,
208                 Token::Str(variant),
209                 EnumFormat::Map,
210             )),
211             Token::SeqEnd
212             | Token::TupleEnd
213             | Token::TupleStructEnd
214             | Token::MapEnd
215             | Token::StructEnd
216             | Token::TupleVariantEnd
217             | Token::StructVariantEnd => Err(unexpected(token)),
218         }
219     }
220 
deserialize_option<V>(self, visitor: V) -> Result<V::Value, Error> where V: Visitor<'de>,221     fn deserialize_option<V>(self, visitor: V) -> Result<V::Value, Error>
222     where
223         V: Visitor<'de>,
224     {
225         match self.peek_token()? {
226             Token::Unit | Token::None => {
227                 self.next_token()?;
228                 visitor.visit_none()
229             }
230             Token::Some => {
231                 self.next_token()?;
232                 visitor.visit_some(self)
233             }
234             _ => self.deserialize_any(visitor),
235         }
236     }
237 
deserialize_enum<V>( self, name: &'static str, _variants: &'static [&'static str], visitor: V, ) -> Result<V::Value, Error> where V: Visitor<'de>,238     fn deserialize_enum<V>(
239         self,
240         name: &'static str,
241         _variants: &'static [&'static str],
242         visitor: V,
243     ) -> Result<V::Value, Error>
244     where
245         V: Visitor<'de>,
246     {
247         match self.peek_token()? {
248             Token::Enum { name: n } if name == n => {
249                 self.next_token()?;
250 
251                 visitor.visit_enum(DeserializerEnumVisitor { de: self })
252             }
253             Token::UnitVariant { name: n, .. }
254             | Token::NewtypeVariant { name: n, .. }
255             | Token::TupleVariant { name: n, .. }
256             | Token::StructVariant { name: n, .. }
257                 if name == n =>
258             {
259                 visitor.visit_enum(DeserializerEnumVisitor { de: self })
260             }
261             _ => self.deserialize_any(visitor),
262         }
263     }
264 
deserialize_unit_struct<V>(self, name: &'static str, visitor: V) -> Result<V::Value, Error> where V: Visitor<'de>,265     fn deserialize_unit_struct<V>(self, name: &'static str, visitor: V) -> Result<V::Value, Error>
266     where
267         V: Visitor<'de>,
268     {
269         match self.peek_token()? {
270             Token::UnitStruct { .. } => {
271                 assert_next_token(self, Token::UnitStruct { name })?;
272                 visitor.visit_unit()
273             }
274             _ => self.deserialize_any(visitor),
275         }
276     }
277 
deserialize_newtype_struct<V>( self, name: &'static str, visitor: V, ) -> Result<V::Value, Error> where V: Visitor<'de>,278     fn deserialize_newtype_struct<V>(
279         self,
280         name: &'static str,
281         visitor: V,
282     ) -> Result<V::Value, Error>
283     where
284         V: Visitor<'de>,
285     {
286         match self.peek_token()? {
287             Token::NewtypeStruct { .. } => {
288                 assert_next_token(self, Token::NewtypeStruct { name })?;
289                 visitor.visit_newtype_struct(self)
290             }
291             _ => self.deserialize_any(visitor),
292         }
293     }
294 
deserialize_tuple<V>(self, len: usize, visitor: V) -> Result<V::Value, Error> where V: Visitor<'de>,295     fn deserialize_tuple<V>(self, len: usize, visitor: V) -> Result<V::Value, Error>
296     where
297         V: Visitor<'de>,
298     {
299         match self.peek_token()? {
300             Token::Unit | Token::UnitStruct { .. } => {
301                 self.next_token()?;
302                 visitor.visit_unit()
303             }
304             Token::Seq { .. } => {
305                 self.next_token()?;
306                 self.visit_seq(Some(len), Token::SeqEnd, visitor)
307             }
308             Token::Tuple { .. } => {
309                 self.next_token()?;
310                 self.visit_seq(Some(len), Token::TupleEnd, visitor)
311             }
312             Token::TupleStruct { .. } => {
313                 self.next_token()?;
314                 self.visit_seq(Some(len), Token::TupleStructEnd, visitor)
315             }
316             _ => self.deserialize_any(visitor),
317         }
318     }
319 
deserialize_tuple_struct<V>( self, name: &'static str, len: usize, visitor: V, ) -> Result<V::Value, Error> where V: Visitor<'de>,320     fn deserialize_tuple_struct<V>(
321         self,
322         name: &'static str,
323         len: usize,
324         visitor: V,
325     ) -> Result<V::Value, Error>
326     where
327         V: Visitor<'de>,
328     {
329         match self.peek_token()? {
330             Token::Unit => {
331                 self.next_token()?;
332                 visitor.visit_unit()
333             }
334             Token::UnitStruct { .. } => {
335                 assert_next_token(self, Token::UnitStruct { name })?;
336                 visitor.visit_unit()
337             }
338             Token::Seq { .. } => {
339                 self.next_token()?;
340                 self.visit_seq(Some(len), Token::SeqEnd, visitor)
341             }
342             Token::Tuple { .. } => {
343                 self.next_token()?;
344                 self.visit_seq(Some(len), Token::TupleEnd, visitor)
345             }
346             Token::TupleStruct { len: n, .. } => {
347                 assert_next_token(self, Token::TupleStruct { name, len: n })?;
348                 self.visit_seq(Some(len), Token::TupleStructEnd, visitor)
349             }
350             _ => self.deserialize_any(visitor),
351         }
352     }
353 
deserialize_struct<V>( self, name: &'static str, fields: &'static [&'static str], visitor: V, ) -> Result<V::Value, Error> where V: Visitor<'de>,354     fn deserialize_struct<V>(
355         self,
356         name: &'static str,
357         fields: &'static [&'static str],
358         visitor: V,
359     ) -> Result<V::Value, Error>
360     where
361         V: Visitor<'de>,
362     {
363         match self.peek_token()? {
364             Token::Struct { len: n, .. } => {
365                 assert_next_token(self, Token::Struct { name, len: n })?;
366                 self.visit_map(Some(fields.len()), Token::StructEnd, visitor)
367             }
368             Token::Map { .. } => {
369                 self.next_token()?;
370                 self.visit_map(Some(fields.len()), Token::MapEnd, visitor)
371             }
372             _ => self.deserialize_any(visitor),
373         }
374     }
375 
is_human_readable(&self) -> bool376     fn is_human_readable(&self) -> bool {
377         panic!(
378             "Types which have different human-readable and compact representations \
379              must explicitly mark their test cases with `serde_test::Configure`"
380         );
381     }
382 }
383 
384 //////////////////////////////////////////////////////////////////////////
385 
386 struct DeserializerSeqVisitor<'a, 'de: 'a> {
387     de: &'a mut Deserializer<'de>,
388     len: Option<usize>,
389     end: Token,
390 }
391 
392 impl<'de, 'a> SeqAccess<'de> for DeserializerSeqVisitor<'a, 'de> {
393     type Error = Error;
394 
next_element_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>, Error> where T: DeserializeSeed<'de>,395     fn next_element_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>, Error>
396     where
397         T: DeserializeSeed<'de>,
398     {
399         if self.de.peek_token_opt() == Some(self.end) {
400             return Ok(None);
401         }
402         self.len = self.len.map(|len| len.saturating_sub(1));
403         seed.deserialize(&mut *self.de).map(Some)
404     }
405 
size_hint(&self) -> Option<usize>406     fn size_hint(&self) -> Option<usize> {
407         self.len
408     }
409 }
410 
411 //////////////////////////////////////////////////////////////////////////
412 
413 struct DeserializerMapVisitor<'a, 'de: 'a> {
414     de: &'a mut Deserializer<'de>,
415     len: Option<usize>,
416     end: Token,
417 }
418 
419 impl<'de, 'a> MapAccess<'de> for DeserializerMapVisitor<'a, 'de> {
420     type Error = Error;
421 
next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>, Error> where K: DeserializeSeed<'de>,422     fn next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>, Error>
423     where
424         K: DeserializeSeed<'de>,
425     {
426         if self.de.peek_token_opt() == Some(self.end) {
427             return Ok(None);
428         }
429         self.len = self.len.map(|len| len.saturating_sub(1));
430         seed.deserialize(&mut *self.de).map(Some)
431     }
432 
next_value_seed<V>(&mut self, seed: V) -> Result<V::Value, Error> where V: DeserializeSeed<'de>,433     fn next_value_seed<V>(&mut self, seed: V) -> Result<V::Value, Error>
434     where
435         V: DeserializeSeed<'de>,
436     {
437         seed.deserialize(&mut *self.de)
438     }
439 
size_hint(&self) -> Option<usize>440     fn size_hint(&self) -> Option<usize> {
441         self.len
442     }
443 }
444 
445 //////////////////////////////////////////////////////////////////////////
446 
447 struct DeserializerEnumVisitor<'a, 'de: 'a> {
448     de: &'a mut Deserializer<'de>,
449 }
450 
451 impl<'de, 'a> EnumAccess<'de> for DeserializerEnumVisitor<'a, 'de> {
452     type Error = Error;
453     type Variant = Self;
454 
variant_seed<V>(self, seed: V) -> Result<(V::Value, Self), Error> where V: DeserializeSeed<'de>,455     fn variant_seed<V>(self, seed: V) -> Result<(V::Value, Self), Error>
456     where
457         V: DeserializeSeed<'de>,
458     {
459         match self.de.peek_token()? {
460             Token::UnitVariant { variant: v, .. }
461             | Token::NewtypeVariant { variant: v, .. }
462             | Token::TupleVariant { variant: v, .. }
463             | Token::StructVariant { variant: v, .. } => {
464                 let de = v.into_deserializer();
465                 let value = seed.deserialize(de)?;
466                 Ok((value, self))
467             }
468             _ => {
469                 let value = seed.deserialize(&mut *self.de)?;
470                 Ok((value, self))
471             }
472         }
473     }
474 }
475 
476 impl<'de, 'a> VariantAccess<'de> for DeserializerEnumVisitor<'a, 'de> {
477     type Error = Error;
478 
unit_variant(self) -> Result<(), Error>479     fn unit_variant(self) -> Result<(), Error> {
480         match self.de.peek_token()? {
481             Token::UnitVariant { .. } => {
482                 self.de.next_token()?;
483                 Ok(())
484             }
485             _ => Deserialize::deserialize(self.de),
486         }
487     }
488 
newtype_variant_seed<T>(self, seed: T) -> Result<T::Value, Self::Error> where T: DeserializeSeed<'de>,489     fn newtype_variant_seed<T>(self, seed: T) -> Result<T::Value, Self::Error>
490     where
491         T: DeserializeSeed<'de>,
492     {
493         match self.de.peek_token()? {
494             Token::NewtypeVariant { .. } => {
495                 self.de.next_token()?;
496                 seed.deserialize(self.de)
497             }
498             _ => seed.deserialize(self.de),
499         }
500     }
501 
tuple_variant<V>(self, len: usize, visitor: V) -> Result<V::Value, Error> where V: Visitor<'de>,502     fn tuple_variant<V>(self, len: usize, visitor: V) -> Result<V::Value, Error>
503     where
504         V: Visitor<'de>,
505     {
506         match self.de.peek_token()? {
507             Token::TupleVariant { len: enum_len, .. } => {
508                 let token = self.de.next_token()?;
509 
510                 if len == enum_len {
511                     self.de
512                         .visit_seq(Some(len), Token::TupleVariantEnd, visitor)
513                 } else {
514                     Err(unexpected(token))
515                 }
516             }
517             Token::Seq {
518                 len: Some(enum_len),
519             } => {
520                 let token = self.de.next_token()?;
521 
522                 if len == enum_len {
523                     self.de.visit_seq(Some(len), Token::SeqEnd, visitor)
524                 } else {
525                     Err(unexpected(token))
526                 }
527             }
528             _ => de::Deserializer::deserialize_any(self.de, visitor),
529         }
530     }
531 
struct_variant<V>( self, fields: &'static [&'static str], visitor: V, ) -> Result<V::Value, Error> where V: Visitor<'de>,532     fn struct_variant<V>(
533         self,
534         fields: &'static [&'static str],
535         visitor: V,
536     ) -> Result<V::Value, Error>
537     where
538         V: Visitor<'de>,
539     {
540         match self.de.peek_token()? {
541             Token::StructVariant { len: enum_len, .. } => {
542                 let token = self.de.next_token()?;
543 
544                 if fields.len() == enum_len {
545                     self.de
546                         .visit_map(Some(fields.len()), Token::StructVariantEnd, visitor)
547                 } else {
548                     Err(unexpected(token))
549                 }
550             }
551             Token::Map {
552                 len: Some(enum_len),
553             } => {
554                 let token = self.de.next_token()?;
555 
556                 if fields.len() == enum_len {
557                     self.de
558                         .visit_map(Some(fields.len()), Token::MapEnd, visitor)
559                 } else {
560                     Err(unexpected(token))
561                 }
562             }
563             _ => de::Deserializer::deserialize_any(self.de, visitor),
564         }
565     }
566 }
567 
568 //////////////////////////////////////////////////////////////////////////
569 
570 struct EnumMapVisitor<'a, 'de: 'a> {
571     de: &'a mut Deserializer<'de>,
572     variant: Option<Token>,
573     format: EnumFormat,
574 }
575 
576 enum EnumFormat {
577     Seq,
578     Map,
579     Any,
580 }
581 
582 impl<'a, 'de> EnumMapVisitor<'a, 'de> {
new(de: &'a mut Deserializer<'de>, variant: Token, format: EnumFormat) -> Self583     fn new(de: &'a mut Deserializer<'de>, variant: Token, format: EnumFormat) -> Self {
584         EnumMapVisitor {
585             de,
586             variant: Some(variant),
587             format,
588         }
589     }
590 }
591 
592 impl<'de, 'a> MapAccess<'de> for EnumMapVisitor<'a, 'de> {
593     type Error = Error;
594 
next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>, Error> where K: DeserializeSeed<'de>,595     fn next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>, Error>
596     where
597         K: DeserializeSeed<'de>,
598     {
599         match self.variant.take() {
600             Some(Token::Str(variant)) => seed.deserialize(variant.into_deserializer()).map(Some),
601             Some(Token::Bytes(variant)) => seed
602                 .deserialize(BytesDeserializer { value: variant })
603                 .map(Some),
604             Some(Token::U32(variant)) => seed.deserialize(variant.into_deserializer()).map(Some),
605             Some(other) => Err(unexpected(other)),
606             None => Ok(None),
607         }
608     }
609 
next_value_seed<V>(&mut self, seed: V) -> Result<V::Value, Error> where V: DeserializeSeed<'de>,610     fn next_value_seed<V>(&mut self, seed: V) -> Result<V::Value, Error>
611     where
612         V: DeserializeSeed<'de>,
613     {
614         match self.format {
615             EnumFormat::Seq => {
616                 let value = {
617                     let visitor = DeserializerSeqVisitor {
618                         de: self.de,
619                         len: None,
620                         end: Token::TupleVariantEnd,
621                     };
622                     seed.deserialize(SeqAccessDeserializer::new(visitor))?
623                 };
624                 assert_next_token(self.de, Token::TupleVariantEnd)?;
625                 Ok(value)
626             }
627             EnumFormat::Map => {
628                 let value = {
629                     let visitor = DeserializerMapVisitor {
630                         de: self.de,
631                         len: None,
632                         end: Token::StructVariantEnd,
633                     };
634                     seed.deserialize(MapAccessDeserializer::new(visitor))?
635                 };
636                 assert_next_token(self.de, Token::StructVariantEnd)?;
637                 Ok(value)
638             }
639             EnumFormat::Any => seed.deserialize(&mut *self.de),
640         }
641     }
642 }
643 
644 struct BytesDeserializer {
645     value: &'static [u8],
646 }
647 
648 impl<'de> de::Deserializer<'de> for BytesDeserializer {
649     type Error = Error;
650 
deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: de::Visitor<'de>,651     fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
652     where
653         V: de::Visitor<'de>,
654     {
655         visitor.visit_bytes(self.value)
656     }
657 
658     forward_to_deserialize_any! {
659         bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
660         bytes byte_buf option unit unit_struct newtype_struct seq tuple
661         tuple_struct map struct enum identifier ignored_any
662     }
663 }
664