1 //! Customizations to use with Serde's `#[serde(with = …)]` attribute.
2 
3 /// Serialize/deserialize an enum using a YAML map containing one entry in which
4 /// the key identifies the variant name.
5 ///
6 /// # Example
7 ///
8 /// ```
9 /// # use serde_derive::{Deserialize, Serialize};
10 /// use serde::{Deserialize, Serialize};
11 ///
12 /// #[derive(Serialize, Deserialize, PartialEq, Debug)]
13 /// enum Enum {
14 ///     Unit,
15 ///     Newtype(usize),
16 ///     Tuple(usize, usize),
17 ///     Struct { value: usize },
18 /// }
19 ///
20 /// #[derive(Serialize, Deserialize, PartialEq, Debug)]
21 /// struct Struct {
22 ///     #[serde(with = "serde_yaml::with::singleton_map")]
23 ///     w: Enum,
24 ///     #[serde(with = "serde_yaml::with::singleton_map")]
25 ///     x: Enum,
26 ///     #[serde(with = "serde_yaml::with::singleton_map")]
27 ///     y: Enum,
28 ///     #[serde(with = "serde_yaml::with::singleton_map")]
29 ///     z: Enum,
30 /// }
31 ///
32 /// fn main() {
33 ///     let object = Struct {
34 ///         w: Enum::Unit,
35 ///         x: Enum::Newtype(1),
36 ///         y: Enum::Tuple(1, 1),
37 ///         z: Enum::Struct { value: 1 },
38 ///     };
39 ///
40 ///     let yaml = serde_yaml::to_string(&object).unwrap();
41 ///     print!("{}", yaml);
42 ///
43 ///     let deserialized: Struct = serde_yaml::from_str(&yaml).unwrap();
44 ///     assert_eq!(object, deserialized);
45 /// }
46 /// ```
47 ///
48 /// The representation using `singleton_map` on all the fields is:
49 ///
50 /// ```yaml
51 /// w: Unit
52 /// x:
53 ///   Newtype: 1
54 /// y:
55 ///   Tuple:
56 ///   - 1
57 ///   - 1
58 /// z:
59 ///   Struct:
60 ///     value: 1
61 /// ```
62 ///
63 /// Without `singleton_map`, the default behavior would have been to serialize
64 /// as:
65 ///
66 /// ```yaml
67 /// w: Unit
68 /// x: !Newtype 1
69 /// y: !Tuple
70 /// - 1
71 /// - 1
72 /// z: !Struct
73 ///   value: 1
74 /// ```
75 pub mod singleton_map {
76     use crate::value::{Mapping, Sequence, Value};
77     use serde::de::{
78         self, Deserialize, DeserializeSeed, Deserializer, EnumAccess, IgnoredAny, MapAccess,
79         Unexpected, VariantAccess, Visitor,
80     };
81     use serde::ser::{
82         self, Serialize, SerializeMap, SerializeStructVariant, SerializeTupleVariant, Serializer,
83     };
84     use std::fmt::{self, Display};
85 
86     #[allow(missing_docs)]
serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error> where T: Serialize, S: Serializer,87     pub fn serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
88     where
89         T: Serialize,
90         S: Serializer,
91     {
92         value.serialize(SingletonMap {
93             delegate: serializer,
94         })
95     }
96 
97     #[allow(missing_docs)]
deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error> where T: Deserialize<'de>, D: Deserializer<'de>,98     pub fn deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error>
99     where
100         T: Deserialize<'de>,
101         D: Deserializer<'de>,
102     {
103         T::deserialize(SingletonMap {
104             delegate: deserializer,
105         })
106     }
107 
108     struct SingletonMap<D> {
109         delegate: D,
110     }
111 
112     impl<D> Serialize for SingletonMap<D>
113     where
114         D: Serialize,
115     {
serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer,116         fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
117         where
118             S: Serializer,
119         {
120             self.delegate.serialize(SingletonMap {
121                 delegate: serializer,
122             })
123         }
124     }
125 
126     impl<D> Serializer for SingletonMap<D>
127     where
128         D: Serializer,
129     {
130         type Ok = D::Ok;
131         type Error = D::Error;
132 
133         type SerializeSeq = D::SerializeSeq;
134         type SerializeTuple = D::SerializeTuple;
135         type SerializeTupleStruct = D::SerializeTupleStruct;
136         type SerializeTupleVariant = SerializeTupleVariantAsSingletonMap<D::SerializeMap>;
137         type SerializeMap = D::SerializeMap;
138         type SerializeStruct = D::SerializeStruct;
139         type SerializeStructVariant = SerializeStructVariantAsSingletonMap<D::SerializeMap>;
140 
serialize_bool(self, v: bool) -> Result<Self::Ok, Self::Error>141         fn serialize_bool(self, v: bool) -> Result<Self::Ok, Self::Error> {
142             self.delegate.serialize_bool(v)
143         }
144 
serialize_i8(self, v: i8) -> Result<Self::Ok, Self::Error>145         fn serialize_i8(self, v: i8) -> Result<Self::Ok, Self::Error> {
146             self.delegate.serialize_i8(v)
147         }
148 
serialize_i16(self, v: i16) -> Result<Self::Ok, Self::Error>149         fn serialize_i16(self, v: i16) -> Result<Self::Ok, Self::Error> {
150             self.delegate.serialize_i16(v)
151         }
152 
serialize_i32(self, v: i32) -> Result<Self::Ok, Self::Error>153         fn serialize_i32(self, v: i32) -> Result<Self::Ok, Self::Error> {
154             self.delegate.serialize_i32(v)
155         }
156 
serialize_i64(self, v: i64) -> Result<Self::Ok, Self::Error>157         fn serialize_i64(self, v: i64) -> Result<Self::Ok, Self::Error> {
158             self.delegate.serialize_i64(v)
159         }
160 
serialize_i128(self, v: i128) -> Result<Self::Ok, Self::Error>161         fn serialize_i128(self, v: i128) -> Result<Self::Ok, Self::Error> {
162             self.delegate.serialize_i128(v)
163         }
164 
serialize_u8(self, v: u8) -> Result<Self::Ok, Self::Error>165         fn serialize_u8(self, v: u8) -> Result<Self::Ok, Self::Error> {
166             self.delegate.serialize_u8(v)
167         }
168 
serialize_u16(self, v: u16) -> Result<Self::Ok, Self::Error>169         fn serialize_u16(self, v: u16) -> Result<Self::Ok, Self::Error> {
170             self.delegate.serialize_u16(v)
171         }
172 
serialize_u32(self, v: u32) -> Result<Self::Ok, Self::Error>173         fn serialize_u32(self, v: u32) -> Result<Self::Ok, Self::Error> {
174             self.delegate.serialize_u32(v)
175         }
176 
serialize_u64(self, v: u64) -> Result<Self::Ok, Self::Error>177         fn serialize_u64(self, v: u64) -> Result<Self::Ok, Self::Error> {
178             self.delegate.serialize_u64(v)
179         }
180 
serialize_u128(self, v: u128) -> Result<Self::Ok, Self::Error>181         fn serialize_u128(self, v: u128) -> Result<Self::Ok, Self::Error> {
182             self.delegate.serialize_u128(v)
183         }
184 
serialize_f32(self, v: f32) -> Result<Self::Ok, Self::Error>185         fn serialize_f32(self, v: f32) -> Result<Self::Ok, Self::Error> {
186             self.delegate.serialize_f32(v)
187         }
188 
serialize_f64(self, v: f64) -> Result<Self::Ok, Self::Error>189         fn serialize_f64(self, v: f64) -> Result<Self::Ok, Self::Error> {
190             self.delegate.serialize_f64(v)
191         }
192 
serialize_char(self, v: char) -> Result<Self::Ok, Self::Error>193         fn serialize_char(self, v: char) -> Result<Self::Ok, Self::Error> {
194             self.delegate.serialize_char(v)
195         }
196 
serialize_str(self, v: &str) -> Result<Self::Ok, Self::Error>197         fn serialize_str(self, v: &str) -> Result<Self::Ok, Self::Error> {
198             self.delegate.serialize_str(v)
199         }
200 
serialize_bytes(self, v: &[u8]) -> Result<Self::Ok, Self::Error>201         fn serialize_bytes(self, v: &[u8]) -> Result<Self::Ok, Self::Error> {
202             self.delegate.serialize_bytes(v)
203         }
204 
serialize_unit(self) -> Result<Self::Ok, Self::Error>205         fn serialize_unit(self) -> Result<Self::Ok, Self::Error> {
206             self.delegate.serialize_unit()
207         }
208 
serialize_unit_struct(self, name: &'static str) -> Result<Self::Ok, Self::Error>209         fn serialize_unit_struct(self, name: &'static str) -> Result<Self::Ok, Self::Error> {
210             self.delegate.serialize_unit_struct(name)
211         }
212 
serialize_unit_variant( self, name: &'static str, variant_index: u32, variant: &'static str, ) -> Result<Self::Ok, Self::Error>213         fn serialize_unit_variant(
214             self,
215             name: &'static str,
216             variant_index: u32,
217             variant: &'static str,
218         ) -> Result<Self::Ok, Self::Error> {
219             self.delegate
220                 .serialize_unit_variant(name, variant_index, variant)
221         }
222 
serialize_newtype_struct<T>( self, name: &'static str, value: &T, ) -> Result<Self::Ok, Self::Error> where T: ?Sized + Serialize,223         fn serialize_newtype_struct<T>(
224             self,
225             name: &'static str,
226             value: &T,
227         ) -> Result<Self::Ok, Self::Error>
228         where
229             T: ?Sized + Serialize,
230         {
231             self.delegate.serialize_newtype_struct(name, value)
232         }
233 
serialize_newtype_variant<T>( self, _name: &'static str, _variant_index: u32, variant: &'static str, value: &T, ) -> Result<Self::Ok, Self::Error> where T: ?Sized + Serialize,234         fn serialize_newtype_variant<T>(
235             self,
236             _name: &'static str,
237             _variant_index: u32,
238             variant: &'static str,
239             value: &T,
240         ) -> Result<Self::Ok, Self::Error>
241         where
242             T: ?Sized + Serialize,
243         {
244             let mut map = self.delegate.serialize_map(Some(1))?;
245             map.serialize_entry(variant, value)?;
246             map.end()
247         }
248 
serialize_none(self) -> Result<Self::Ok, Self::Error>249         fn serialize_none(self) -> Result<Self::Ok, Self::Error> {
250             self.delegate.serialize_none()
251         }
252 
serialize_some<V>(self, value: &V) -> Result<Self::Ok, Self::Error> where V: ?Sized + Serialize,253         fn serialize_some<V>(self, value: &V) -> Result<Self::Ok, Self::Error>
254         where
255             V: ?Sized + Serialize,
256         {
257             self.delegate
258                 .serialize_some(&SingletonMap { delegate: value })
259         }
260 
serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq, Self::Error>261         fn serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq, Self::Error> {
262             self.delegate.serialize_seq(len)
263         }
264 
serialize_tuple(self, len: usize) -> Result<Self::SerializeTuple, Self::Error>265         fn serialize_tuple(self, len: usize) -> Result<Self::SerializeTuple, Self::Error> {
266             self.delegate.serialize_tuple(len)
267         }
268 
serialize_tuple_struct( self, name: &'static str, len: usize, ) -> Result<Self::SerializeTupleStruct, Self::Error>269         fn serialize_tuple_struct(
270             self,
271             name: &'static str,
272             len: usize,
273         ) -> Result<Self::SerializeTupleStruct, Self::Error> {
274             self.delegate.serialize_tuple_struct(name, len)
275         }
276 
serialize_tuple_variant( self, _name: &'static str, _variant_index: u32, variant: &'static str, len: usize, ) -> Result<Self::SerializeTupleVariant, Self::Error>277         fn serialize_tuple_variant(
278             self,
279             _name: &'static str,
280             _variant_index: u32,
281             variant: &'static str,
282             len: usize,
283         ) -> Result<Self::SerializeTupleVariant, Self::Error> {
284             let mut map = self.delegate.serialize_map(Some(1))?;
285             map.serialize_key(variant)?;
286             let sequence = Sequence::with_capacity(len);
287             Ok(SerializeTupleVariantAsSingletonMap { map, sequence })
288         }
289 
serialize_map(self, len: Option<usize>) -> Result<Self::SerializeMap, Self::Error>290         fn serialize_map(self, len: Option<usize>) -> Result<Self::SerializeMap, Self::Error> {
291             self.delegate.serialize_map(len)
292         }
293 
serialize_struct( self, name: &'static str, len: usize, ) -> Result<Self::SerializeStruct, Self::Error>294         fn serialize_struct(
295             self,
296             name: &'static str,
297             len: usize,
298         ) -> Result<Self::SerializeStruct, Self::Error> {
299             self.delegate.serialize_struct(name, len)
300         }
301 
serialize_struct_variant( self, _name: &'static str, _variant_index: u32, variant: &'static str, len: usize, ) -> Result<Self::SerializeStructVariant, Self::Error>302         fn serialize_struct_variant(
303             self,
304             _name: &'static str,
305             _variant_index: u32,
306             variant: &'static str,
307             len: usize,
308         ) -> Result<Self::SerializeStructVariant, Self::Error> {
309             let mut map = self.delegate.serialize_map(Some(1))?;
310             map.serialize_key(variant)?;
311             let mapping = Mapping::with_capacity(len);
312             Ok(SerializeStructVariantAsSingletonMap { map, mapping })
313         }
314 
collect_str<T>(self, value: &T) -> Result<Self::Ok, Self::Error> where T: ?Sized + Display,315         fn collect_str<T>(self, value: &T) -> Result<Self::Ok, Self::Error>
316         where
317             T: ?Sized + Display,
318         {
319             self.delegate.collect_str(value)
320         }
321 
is_human_readable(&self) -> bool322         fn is_human_readable(&self) -> bool {
323             self.delegate.is_human_readable()
324         }
325     }
326 
327     struct SerializeTupleVariantAsSingletonMap<M> {
328         map: M,
329         sequence: Sequence,
330     }
331 
332     impl<M> SerializeTupleVariant for SerializeTupleVariantAsSingletonMap<M>
333     where
334         M: SerializeMap,
335     {
336         type Ok = M::Ok;
337         type Error = M::Error;
338 
serialize_field<T>(&mut self, field: &T) -> Result<(), Self::Error> where T: ?Sized + Serialize,339         fn serialize_field<T>(&mut self, field: &T) -> Result<(), Self::Error>
340         where
341             T: ?Sized + Serialize,
342         {
343             let value = field
344                 .serialize(crate::value::Serializer)
345                 .map_err(ser::Error::custom)?;
346             self.sequence.push(value);
347             Ok(())
348         }
349 
end(mut self) -> Result<Self::Ok, Self::Error>350         fn end(mut self) -> Result<Self::Ok, Self::Error> {
351             self.map.serialize_value(&self.sequence)?;
352             self.map.end()
353         }
354     }
355 
356     struct SerializeStructVariantAsSingletonMap<M> {
357         map: M,
358         mapping: Mapping,
359     }
360 
361     impl<M> SerializeStructVariant for SerializeStructVariantAsSingletonMap<M>
362     where
363         M: SerializeMap,
364     {
365         type Ok = M::Ok;
366         type Error = M::Error;
367 
serialize_field<T>(&mut self, name: &'static str, field: &T) -> Result<(), Self::Error> where T: ?Sized + Serialize,368         fn serialize_field<T>(&mut self, name: &'static str, field: &T) -> Result<(), Self::Error>
369         where
370             T: ?Sized + Serialize,
371         {
372             let value = field
373                 .serialize(crate::value::Serializer)
374                 .map_err(ser::Error::custom)?;
375             self.mapping.insert(Value::String(name.to_owned()), value);
376             Ok(())
377         }
378 
end(mut self) -> Result<Self::Ok, Self::Error>379         fn end(mut self) -> Result<Self::Ok, Self::Error> {
380             self.map.serialize_value(&self.mapping)?;
381             self.map.end()
382         }
383     }
384 
385     impl<'de, D> Deserializer<'de> for SingletonMap<D>
386     where
387         D: Deserializer<'de>,
388     {
389         type Error = D::Error;
390 
deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,391         fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
392         where
393             V: Visitor<'de>,
394         {
395             self.delegate.deserialize_any(visitor)
396         }
397 
deserialize_bool<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,398         fn deserialize_bool<V>(self, visitor: V) -> Result<V::Value, Self::Error>
399         where
400             V: Visitor<'de>,
401         {
402             self.delegate.deserialize_bool(visitor)
403         }
404 
deserialize_i8<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,405         fn deserialize_i8<V>(self, visitor: V) -> Result<V::Value, Self::Error>
406         where
407             V: Visitor<'de>,
408         {
409             self.delegate.deserialize_i8(visitor)
410         }
411 
deserialize_i16<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,412         fn deserialize_i16<V>(self, visitor: V) -> Result<V::Value, Self::Error>
413         where
414             V: Visitor<'de>,
415         {
416             self.delegate.deserialize_i16(visitor)
417         }
418 
deserialize_i32<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,419         fn deserialize_i32<V>(self, visitor: V) -> Result<V::Value, Self::Error>
420         where
421             V: Visitor<'de>,
422         {
423             self.delegate.deserialize_i32(visitor)
424         }
425 
deserialize_i64<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,426         fn deserialize_i64<V>(self, visitor: V) -> Result<V::Value, Self::Error>
427         where
428             V: Visitor<'de>,
429         {
430             self.delegate.deserialize_i64(visitor)
431         }
432 
deserialize_i128<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,433         fn deserialize_i128<V>(self, visitor: V) -> Result<V::Value, Self::Error>
434         where
435             V: Visitor<'de>,
436         {
437             self.delegate.deserialize_i128(visitor)
438         }
439 
deserialize_u8<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,440         fn deserialize_u8<V>(self, visitor: V) -> Result<V::Value, Self::Error>
441         where
442             V: Visitor<'de>,
443         {
444             self.delegate.deserialize_u8(visitor)
445         }
446 
deserialize_u16<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,447         fn deserialize_u16<V>(self, visitor: V) -> Result<V::Value, Self::Error>
448         where
449             V: Visitor<'de>,
450         {
451             self.delegate.deserialize_u16(visitor)
452         }
453 
deserialize_u32<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,454         fn deserialize_u32<V>(self, visitor: V) -> Result<V::Value, Self::Error>
455         where
456             V: Visitor<'de>,
457         {
458             self.delegate.deserialize_u32(visitor)
459         }
460 
deserialize_u64<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,461         fn deserialize_u64<V>(self, visitor: V) -> Result<V::Value, Self::Error>
462         where
463             V: Visitor<'de>,
464         {
465             self.delegate.deserialize_u64(visitor)
466         }
467 
deserialize_u128<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,468         fn deserialize_u128<V>(self, visitor: V) -> Result<V::Value, Self::Error>
469         where
470             V: Visitor<'de>,
471         {
472             self.delegate.deserialize_u128(visitor)
473         }
474 
deserialize_f32<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,475         fn deserialize_f32<V>(self, visitor: V) -> Result<V::Value, Self::Error>
476         where
477             V: Visitor<'de>,
478         {
479             self.delegate.deserialize_f32(visitor)
480         }
481 
deserialize_f64<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,482         fn deserialize_f64<V>(self, visitor: V) -> Result<V::Value, Self::Error>
483         where
484             V: Visitor<'de>,
485         {
486             self.delegate.deserialize_f64(visitor)
487         }
488 
deserialize_char<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,489         fn deserialize_char<V>(self, visitor: V) -> Result<V::Value, Self::Error>
490         where
491             V: Visitor<'de>,
492         {
493             self.delegate.deserialize_char(visitor)
494         }
495 
deserialize_str<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,496         fn deserialize_str<V>(self, visitor: V) -> Result<V::Value, Self::Error>
497         where
498             V: Visitor<'de>,
499         {
500             self.delegate.deserialize_str(visitor)
501         }
502 
deserialize_string<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,503         fn deserialize_string<V>(self, visitor: V) -> Result<V::Value, Self::Error>
504         where
505             V: Visitor<'de>,
506         {
507             self.delegate.deserialize_string(visitor)
508         }
509 
deserialize_bytes<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,510         fn deserialize_bytes<V>(self, visitor: V) -> Result<V::Value, Self::Error>
511         where
512             V: Visitor<'de>,
513         {
514             self.delegate.deserialize_bytes(visitor)
515         }
516 
deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,517         fn deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value, Self::Error>
518         where
519             V: Visitor<'de>,
520         {
521             self.delegate.deserialize_byte_buf(visitor)
522         }
523 
deserialize_option<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,524         fn deserialize_option<V>(self, visitor: V) -> Result<V::Value, Self::Error>
525         where
526             V: Visitor<'de>,
527         {
528             self.delegate.deserialize_option(SingletonMapAsEnum {
529                 name: "",
530                 delegate: visitor,
531             })
532         }
533 
deserialize_unit<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,534         fn deserialize_unit<V>(self, visitor: V) -> Result<V::Value, Self::Error>
535         where
536             V: Visitor<'de>,
537         {
538             self.delegate.deserialize_unit(visitor)
539         }
540 
deserialize_unit_struct<V>( self, name: &'static str, visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,541         fn deserialize_unit_struct<V>(
542             self,
543             name: &'static str,
544             visitor: V,
545         ) -> Result<V::Value, Self::Error>
546         where
547             V: Visitor<'de>,
548         {
549             self.delegate.deserialize_unit_struct(name, visitor)
550         }
551 
deserialize_newtype_struct<V>( self, name: &'static str, visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,552         fn deserialize_newtype_struct<V>(
553             self,
554             name: &'static str,
555             visitor: V,
556         ) -> Result<V::Value, Self::Error>
557         where
558             V: Visitor<'de>,
559         {
560             self.delegate.deserialize_newtype_struct(name, visitor)
561         }
562 
deserialize_seq<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,563         fn deserialize_seq<V>(self, visitor: V) -> Result<V::Value, Self::Error>
564         where
565             V: Visitor<'de>,
566         {
567             self.delegate.deserialize_seq(visitor)
568         }
569 
deserialize_tuple<V>(self, len: usize, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,570         fn deserialize_tuple<V>(self, len: usize, visitor: V) -> Result<V::Value, Self::Error>
571         where
572             V: Visitor<'de>,
573         {
574             self.delegate.deserialize_tuple(len, visitor)
575         }
576 
deserialize_tuple_struct<V>( self, name: &'static str, len: usize, visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,577         fn deserialize_tuple_struct<V>(
578             self,
579             name: &'static str,
580             len: usize,
581             visitor: V,
582         ) -> Result<V::Value, Self::Error>
583         where
584             V: Visitor<'de>,
585         {
586             self.delegate.deserialize_tuple_struct(name, len, visitor)
587         }
588 
deserialize_map<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,589         fn deserialize_map<V>(self, visitor: V) -> Result<V::Value, Self::Error>
590         where
591             V: Visitor<'de>,
592         {
593             self.delegate.deserialize_map(visitor)
594         }
595 
deserialize_struct<V>( self, name: &'static str, fields: &'static [&'static str], visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,596         fn deserialize_struct<V>(
597             self,
598             name: &'static str,
599             fields: &'static [&'static str],
600             visitor: V,
601         ) -> Result<V::Value, Self::Error>
602         where
603             V: Visitor<'de>,
604         {
605             self.delegate.deserialize_struct(name, fields, visitor)
606         }
607 
deserialize_enum<V>( self, name: &'static str, _variants: &'static [&'static str], visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,608         fn deserialize_enum<V>(
609             self,
610             name: &'static str,
611             _variants: &'static [&'static str],
612             visitor: V,
613         ) -> Result<V::Value, Self::Error>
614         where
615             V: Visitor<'de>,
616         {
617             self.delegate.deserialize_any(SingletonMapAsEnum {
618                 name,
619                 delegate: visitor,
620             })
621         }
622 
deserialize_identifier<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,623         fn deserialize_identifier<V>(self, visitor: V) -> Result<V::Value, Self::Error>
624         where
625             V: Visitor<'de>,
626         {
627             self.delegate.deserialize_identifier(visitor)
628         }
629 
deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,630         fn deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
631         where
632             V: Visitor<'de>,
633         {
634             self.delegate.deserialize_ignored_any(visitor)
635         }
636 
is_human_readable(&self) -> bool637         fn is_human_readable(&self) -> bool {
638             self.delegate.is_human_readable()
639         }
640     }
641 
642     struct SingletonMapAsEnum<D> {
643         name: &'static str,
644         delegate: D,
645     }
646 
647     impl<'de, V> Visitor<'de> for SingletonMapAsEnum<V>
648     where
649         V: Visitor<'de>,
650     {
651         type Value = V::Value;
652 
expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result653         fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
654             self.delegate.expecting(formatter)
655         }
656 
visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: de::Error,657         fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
658         where
659             E: de::Error,
660         {
661             self.delegate.visit_enum(de::value::StrDeserializer::new(v))
662         }
663 
visit_borrowed_str<E>(self, v: &'de str) -> Result<Self::Value, E> where E: de::Error,664         fn visit_borrowed_str<E>(self, v: &'de str) -> Result<Self::Value, E>
665         where
666             E: de::Error,
667         {
668             self.delegate
669                 .visit_enum(de::value::BorrowedStrDeserializer::new(v))
670         }
671 
visit_string<E>(self, v: String) -> Result<Self::Value, E> where E: de::Error,672         fn visit_string<E>(self, v: String) -> Result<Self::Value, E>
673         where
674             E: de::Error,
675         {
676             self.delegate
677                 .visit_enum(de::value::StringDeserializer::new(v))
678         }
679 
visit_none<E>(self) -> Result<Self::Value, E> where E: de::Error,680         fn visit_none<E>(self) -> Result<Self::Value, E>
681         where
682             E: de::Error,
683         {
684             self.delegate.visit_none()
685         }
686 
visit_some<D>(self, deserializer: D) -> Result<Self::Value, D::Error> where D: Deserializer<'de>,687         fn visit_some<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
688         where
689             D: Deserializer<'de>,
690         {
691             self.delegate.visit_some(SingletonMap {
692                 delegate: deserializer,
693             })
694         }
695 
visit_unit<E>(self) -> Result<Self::Value, E> where E: de::Error,696         fn visit_unit<E>(self) -> Result<Self::Value, E>
697         where
698             E: de::Error,
699         {
700             self.delegate.visit_unit()
701         }
702 
visit_map<A>(self, map: A) -> Result<Self::Value, A::Error> where A: MapAccess<'de>,703         fn visit_map<A>(self, map: A) -> Result<Self::Value, A::Error>
704         where
705             A: MapAccess<'de>,
706         {
707             self.delegate.visit_enum(SingletonMapAsEnum {
708                 name: self.name,
709                 delegate: map,
710             })
711         }
712     }
713 
714     impl<'de, D> EnumAccess<'de> for SingletonMapAsEnum<D>
715     where
716         D: MapAccess<'de>,
717     {
718         type Error = D::Error;
719         type Variant = Self;
720 
variant_seed<V>(mut self, seed: V) -> Result<(V::Value, Self::Variant), Self::Error> where V: DeserializeSeed<'de>,721         fn variant_seed<V>(mut self, seed: V) -> Result<(V::Value, Self::Variant), Self::Error>
722         where
723             V: DeserializeSeed<'de>,
724         {
725             match self.delegate.next_key_seed(seed)? {
726                 Some(value) => Ok((value, self)),
727                 None => Err(de::Error::invalid_value(
728                     Unexpected::Map,
729                     &"map with a single key",
730                 )),
731             }
732         }
733     }
734 
735     impl<'de, D> VariantAccess<'de> for SingletonMapAsEnum<D>
736     where
737         D: MapAccess<'de>,
738     {
739         type Error = D::Error;
740 
unit_variant(self) -> Result<(), Self::Error>741         fn unit_variant(self) -> Result<(), Self::Error> {
742             Err(de::Error::invalid_type(Unexpected::Map, &"unit variant"))
743         }
744 
newtype_variant_seed<T>(mut self, seed: T) -> Result<T::Value, Self::Error> where T: DeserializeSeed<'de>,745         fn newtype_variant_seed<T>(mut self, seed: T) -> Result<T::Value, Self::Error>
746         where
747             T: DeserializeSeed<'de>,
748         {
749             let value = self.delegate.next_value_seed(seed)?;
750             match self.delegate.next_key()? {
751                 None => Ok(value),
752                 Some(IgnoredAny) => Err(de::Error::invalid_value(
753                     Unexpected::Map,
754                     &"map with a single key",
755                 )),
756             }
757         }
758 
tuple_variant<V>(mut self, len: usize, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,759         fn tuple_variant<V>(mut self, len: usize, visitor: V) -> Result<V::Value, Self::Error>
760         where
761             V: Visitor<'de>,
762         {
763             let value = self
764                 .delegate
765                 .next_value_seed(TupleVariantSeed { len, visitor })?;
766             match self.delegate.next_key()? {
767                 None => Ok(value),
768                 Some(IgnoredAny) => Err(de::Error::invalid_value(
769                     Unexpected::Map,
770                     &"map with a single key",
771                 )),
772             }
773         }
774 
struct_variant<V>( mut self, fields: &'static [&'static str], visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,775         fn struct_variant<V>(
776             mut self,
777             fields: &'static [&'static str],
778             visitor: V,
779         ) -> Result<V::Value, Self::Error>
780         where
781             V: Visitor<'de>,
782         {
783             let value = self.delegate.next_value_seed(StructVariantSeed {
784                 name: self.name,
785                 fields,
786                 visitor,
787             })?;
788             match self.delegate.next_key()? {
789                 None => Ok(value),
790                 Some(IgnoredAny) => Err(de::Error::invalid_value(
791                     Unexpected::Map,
792                     &"map with a single key",
793                 )),
794             }
795         }
796     }
797 
798     struct TupleVariantSeed<V> {
799         len: usize,
800         visitor: V,
801     }
802 
803     impl<'de, V> DeserializeSeed<'de> for TupleVariantSeed<V>
804     where
805         V: Visitor<'de>,
806     {
807         type Value = V::Value;
808 
deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error> where D: Deserializer<'de>,809         fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
810         where
811             D: Deserializer<'de>,
812         {
813             deserializer.deserialize_tuple(self.len, self.visitor)
814         }
815     }
816 
817     struct StructVariantSeed<V> {
818         name: &'static str,
819         fields: &'static [&'static str],
820         visitor: V,
821     }
822 
823     impl<'de, V> DeserializeSeed<'de> for StructVariantSeed<V>
824     where
825         V: Visitor<'de>,
826     {
827         type Value = V::Value;
828 
deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error> where D: Deserializer<'de>,829         fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
830         where
831             D: Deserializer<'de>,
832         {
833             deserializer.deserialize_struct(self.name, self.fields, self.visitor)
834         }
835     }
836 }
837 
838 /// Apply [`singleton_map`] to *all* enums contained within the data structure.
839 ///
840 /// # Example
841 ///
842 /// ```
843 /// # use serde_derive::{Deserialize, Serialize};
844 /// use serde::{Deserialize, Serialize};
845 ///
846 /// #[derive(Serialize, Deserialize, PartialEq, Debug)]
847 /// enum Enum {
848 ///     Int(i32),
849 /// }
850 ///
851 /// #[derive(Serialize, Deserialize, PartialEq, Debug)]
852 /// struct Inner {
853 ///     a: Enum,
854 ///     bs: Vec<Enum>,
855 /// }
856 ///
857 /// #[derive(Serialize, Deserialize, PartialEq, Debug)]
858 /// struct Outer {
859 ///     tagged_style: Inner,
860 ///
861 ///     #[serde(with = "serde_yaml::with::singleton_map_recursive")]
862 ///     singleton_map_style: Inner,
863 /// }
864 ///
865 /// fn main() {
866 ///     let object = Outer {
867 ///         tagged_style: Inner {
868 ///             a: Enum::Int(0),
869 ///             bs: vec![Enum::Int(1)],
870 ///         },
871 ///         singleton_map_style: Inner {
872 ///             a: Enum::Int(2),
873 ///             bs: vec![Enum::Int(3)],
874 ///         },
875 ///     };
876 ///
877 ///     let yaml = serde_yaml::to_string(&object).unwrap();
878 ///     print!("{}", yaml);
879 ///
880 ///     let deserialized: Outer = serde_yaml::from_str(&yaml).unwrap();
881 ///     assert_eq!(object, deserialized);
882 /// }
883 /// ```
884 ///
885 /// The serialized output is:
886 ///
887 /// ```yaml
888 /// tagged_style:
889 ///   a: !Int 0
890 ///   bs:
891 ///   - !Int 1
892 /// singleton_map_style:
893 ///   a:
894 ///     Int: 2
895 ///   bs:
896 ///   - Int: 3
897 /// ```
898 ///
899 /// This module can also be used for the top-level serializer or deserializer
900 /// call, without `serde(with = …)`, as follows.
901 ///
902 /// ```
903 /// # use serde_derive::{Deserialize, Serialize};
904 /// # use serde::{Deserialize, Serialize};
905 /// #
906 /// # #[derive(Serialize, Deserialize, PartialEq, Debug)]
907 /// # enum Enum {
908 /// #     Int(i32),
909 /// # }
910 /// #
911 /// # #[derive(Serialize, Deserialize, PartialEq, Debug)]
912 /// # struct Inner {
913 /// #     a: Enum,
914 /// #     bs: Vec<Enum>,
915 /// # }
916 /// #
917 /// use std::io::{self, Write};
918 ///
919 /// fn main() {
920 ///     let object = Inner {
921 ///         a: Enum::Int(0),
922 ///         bs: vec![Enum::Int(1)],
923 ///     };
924 ///
925 ///     let mut buf = Vec::new();
926 ///     let mut serializer = serde_yaml::Serializer::new(&mut buf);
927 ///     serde_yaml::with::singleton_map_recursive::serialize(&object, &mut serializer).unwrap();
928 ///     io::stdout().write_all(&buf).unwrap();
929 ///
930 ///     let deserializer = serde_yaml::Deserializer::from_slice(&buf);
931 ///     let deserialized: Inner = serde_yaml::with::singleton_map_recursive::deserialize(deserializer).unwrap();
932 ///     assert_eq!(object, deserialized);
933 /// }
934 /// ```
935 pub mod singleton_map_recursive {
936     use crate::value::{Mapping, Sequence, Value};
937     use serde::de::{
938         self, Deserialize, DeserializeSeed, Deserializer, EnumAccess, IgnoredAny, MapAccess,
939         SeqAccess, Unexpected, VariantAccess, Visitor,
940     };
941     use serde::ser::{
942         self, Serialize, SerializeMap, SerializeSeq, SerializeStruct, SerializeStructVariant,
943         SerializeTuple, SerializeTupleStruct, SerializeTupleVariant, Serializer,
944     };
945     use std::fmt::{self, Display};
946 
947     #[allow(missing_docs)]
serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error> where T: Serialize, S: Serializer,948     pub fn serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
949     where
950         T: Serialize,
951         S: Serializer,
952     {
953         value.serialize(SingletonMapRecursive {
954             delegate: serializer,
955         })
956     }
957 
958     #[allow(missing_docs)]
deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error> where T: Deserialize<'de>, D: Deserializer<'de>,959     pub fn deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error>
960     where
961         T: Deserialize<'de>,
962         D: Deserializer<'de>,
963     {
964         T::deserialize(SingletonMapRecursive {
965             delegate: deserializer,
966         })
967     }
968 
969     struct SingletonMapRecursive<D> {
970         delegate: D,
971     }
972 
973     impl<D> Serialize for SingletonMapRecursive<D>
974     where
975         D: Serialize,
976     {
serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer,977         fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
978         where
979             S: Serializer,
980         {
981             self.delegate.serialize(SingletonMapRecursive {
982                 delegate: serializer,
983             })
984         }
985     }
986 
987     impl<D> Serializer for SingletonMapRecursive<D>
988     where
989         D: Serializer,
990     {
991         type Ok = D::Ok;
992         type Error = D::Error;
993 
994         type SerializeSeq = SingletonMapRecursive<D::SerializeSeq>;
995         type SerializeTuple = SingletonMapRecursive<D::SerializeTuple>;
996         type SerializeTupleStruct = SingletonMapRecursive<D::SerializeTupleStruct>;
997         type SerializeTupleVariant = SerializeTupleVariantAsSingletonMapRecursive<D::SerializeMap>;
998         type SerializeMap = SingletonMapRecursive<D::SerializeMap>;
999         type SerializeStruct = SingletonMapRecursive<D::SerializeStruct>;
1000         type SerializeStructVariant =
1001             SerializeStructVariantAsSingletonMapRecursive<D::SerializeMap>;
1002 
serialize_bool(self, v: bool) -> Result<Self::Ok, Self::Error>1003         fn serialize_bool(self, v: bool) -> Result<Self::Ok, Self::Error> {
1004             self.delegate.serialize_bool(v)
1005         }
1006 
serialize_i8(self, v: i8) -> Result<Self::Ok, Self::Error>1007         fn serialize_i8(self, v: i8) -> Result<Self::Ok, Self::Error> {
1008             self.delegate.serialize_i8(v)
1009         }
1010 
serialize_i16(self, v: i16) -> Result<Self::Ok, Self::Error>1011         fn serialize_i16(self, v: i16) -> Result<Self::Ok, Self::Error> {
1012             self.delegate.serialize_i16(v)
1013         }
1014 
serialize_i32(self, v: i32) -> Result<Self::Ok, Self::Error>1015         fn serialize_i32(self, v: i32) -> Result<Self::Ok, Self::Error> {
1016             self.delegate.serialize_i32(v)
1017         }
1018 
serialize_i64(self, v: i64) -> Result<Self::Ok, Self::Error>1019         fn serialize_i64(self, v: i64) -> Result<Self::Ok, Self::Error> {
1020             self.delegate.serialize_i64(v)
1021         }
1022 
serialize_i128(self, v: i128) -> Result<Self::Ok, Self::Error>1023         fn serialize_i128(self, v: i128) -> Result<Self::Ok, Self::Error> {
1024             self.delegate.serialize_i128(v)
1025         }
1026 
serialize_u8(self, v: u8) -> Result<Self::Ok, Self::Error>1027         fn serialize_u8(self, v: u8) -> Result<Self::Ok, Self::Error> {
1028             self.delegate.serialize_u8(v)
1029         }
1030 
serialize_u16(self, v: u16) -> Result<Self::Ok, Self::Error>1031         fn serialize_u16(self, v: u16) -> Result<Self::Ok, Self::Error> {
1032             self.delegate.serialize_u16(v)
1033         }
1034 
serialize_u32(self, v: u32) -> Result<Self::Ok, Self::Error>1035         fn serialize_u32(self, v: u32) -> Result<Self::Ok, Self::Error> {
1036             self.delegate.serialize_u32(v)
1037         }
1038 
serialize_u64(self, v: u64) -> Result<Self::Ok, Self::Error>1039         fn serialize_u64(self, v: u64) -> Result<Self::Ok, Self::Error> {
1040             self.delegate.serialize_u64(v)
1041         }
1042 
serialize_u128(self, v: u128) -> Result<Self::Ok, Self::Error>1043         fn serialize_u128(self, v: u128) -> Result<Self::Ok, Self::Error> {
1044             self.delegate.serialize_u128(v)
1045         }
1046 
serialize_f32(self, v: f32) -> Result<Self::Ok, Self::Error>1047         fn serialize_f32(self, v: f32) -> Result<Self::Ok, Self::Error> {
1048             self.delegate.serialize_f32(v)
1049         }
1050 
serialize_f64(self, v: f64) -> Result<Self::Ok, Self::Error>1051         fn serialize_f64(self, v: f64) -> Result<Self::Ok, Self::Error> {
1052             self.delegate.serialize_f64(v)
1053         }
1054 
serialize_char(self, v: char) -> Result<Self::Ok, Self::Error>1055         fn serialize_char(self, v: char) -> Result<Self::Ok, Self::Error> {
1056             self.delegate.serialize_char(v)
1057         }
1058 
serialize_str(self, v: &str) -> Result<Self::Ok, Self::Error>1059         fn serialize_str(self, v: &str) -> Result<Self::Ok, Self::Error> {
1060             self.delegate.serialize_str(v)
1061         }
1062 
serialize_bytes(self, v: &[u8]) -> Result<Self::Ok, Self::Error>1063         fn serialize_bytes(self, v: &[u8]) -> Result<Self::Ok, Self::Error> {
1064             self.delegate.serialize_bytes(v)
1065         }
1066 
serialize_unit(self) -> Result<Self::Ok, Self::Error>1067         fn serialize_unit(self) -> Result<Self::Ok, Self::Error> {
1068             self.delegate.serialize_unit()
1069         }
1070 
serialize_unit_struct(self, name: &'static str) -> Result<Self::Ok, Self::Error>1071         fn serialize_unit_struct(self, name: &'static str) -> Result<Self::Ok, Self::Error> {
1072             self.delegate.serialize_unit_struct(name)
1073         }
1074 
serialize_unit_variant( self, name: &'static str, variant_index: u32, variant: &'static str, ) -> Result<Self::Ok, Self::Error>1075         fn serialize_unit_variant(
1076             self,
1077             name: &'static str,
1078             variant_index: u32,
1079             variant: &'static str,
1080         ) -> Result<Self::Ok, Self::Error> {
1081             self.delegate
1082                 .serialize_unit_variant(name, variant_index, variant)
1083         }
1084 
serialize_newtype_struct<T>( self, name: &'static str, value: &T, ) -> Result<Self::Ok, Self::Error> where T: ?Sized + Serialize,1085         fn serialize_newtype_struct<T>(
1086             self,
1087             name: &'static str,
1088             value: &T,
1089         ) -> Result<Self::Ok, Self::Error>
1090         where
1091             T: ?Sized + Serialize,
1092         {
1093             self.delegate
1094                 .serialize_newtype_struct(name, &SingletonMapRecursive { delegate: value })
1095         }
1096 
serialize_newtype_variant<T>( self, _name: &'static str, _variant_index: u32, variant: &'static str, value: &T, ) -> Result<Self::Ok, Self::Error> where T: ?Sized + Serialize,1097         fn serialize_newtype_variant<T>(
1098             self,
1099             _name: &'static str,
1100             _variant_index: u32,
1101             variant: &'static str,
1102             value: &T,
1103         ) -> Result<Self::Ok, Self::Error>
1104         where
1105             T: ?Sized + Serialize,
1106         {
1107             let mut map = self.delegate.serialize_map(Some(1))?;
1108             map.serialize_entry(variant, &SingletonMapRecursive { delegate: value })?;
1109             map.end()
1110         }
1111 
serialize_none(self) -> Result<Self::Ok, Self::Error>1112         fn serialize_none(self) -> Result<Self::Ok, Self::Error> {
1113             self.delegate.serialize_none()
1114         }
1115 
serialize_some<V>(self, value: &V) -> Result<Self::Ok, Self::Error> where V: ?Sized + Serialize,1116         fn serialize_some<V>(self, value: &V) -> Result<Self::Ok, Self::Error>
1117         where
1118             V: ?Sized + Serialize,
1119         {
1120             self.delegate
1121                 .serialize_some(&SingletonMapRecursive { delegate: value })
1122         }
1123 
serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq, Self::Error>1124         fn serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq, Self::Error> {
1125             Ok(SingletonMapRecursive {
1126                 delegate: self.delegate.serialize_seq(len)?,
1127             })
1128         }
1129 
serialize_tuple(self, len: usize) -> Result<Self::SerializeTuple, Self::Error>1130         fn serialize_tuple(self, len: usize) -> Result<Self::SerializeTuple, Self::Error> {
1131             Ok(SingletonMapRecursive {
1132                 delegate: self.delegate.serialize_tuple(len)?,
1133             })
1134         }
1135 
serialize_tuple_struct( self, name: &'static str, len: usize, ) -> Result<Self::SerializeTupleStruct, Self::Error>1136         fn serialize_tuple_struct(
1137             self,
1138             name: &'static str,
1139             len: usize,
1140         ) -> Result<Self::SerializeTupleStruct, Self::Error> {
1141             Ok(SingletonMapRecursive {
1142                 delegate: self.delegate.serialize_tuple_struct(name, len)?,
1143             })
1144         }
1145 
serialize_tuple_variant( self, _name: &'static str, _variant_index: u32, variant: &'static str, len: usize, ) -> Result<Self::SerializeTupleVariant, Self::Error>1146         fn serialize_tuple_variant(
1147             self,
1148             _name: &'static str,
1149             _variant_index: u32,
1150             variant: &'static str,
1151             len: usize,
1152         ) -> Result<Self::SerializeTupleVariant, Self::Error> {
1153             let mut map = self.delegate.serialize_map(Some(1))?;
1154             map.serialize_key(variant)?;
1155             let sequence = Sequence::with_capacity(len);
1156             Ok(SerializeTupleVariantAsSingletonMapRecursive { map, sequence })
1157         }
1158 
serialize_map(self, len: Option<usize>) -> Result<Self::SerializeMap, Self::Error>1159         fn serialize_map(self, len: Option<usize>) -> Result<Self::SerializeMap, Self::Error> {
1160             Ok(SingletonMapRecursive {
1161                 delegate: self.delegate.serialize_map(len)?,
1162             })
1163         }
1164 
serialize_struct( self, name: &'static str, len: usize, ) -> Result<Self::SerializeStruct, Self::Error>1165         fn serialize_struct(
1166             self,
1167             name: &'static str,
1168             len: usize,
1169         ) -> Result<Self::SerializeStruct, Self::Error> {
1170             Ok(SingletonMapRecursive {
1171                 delegate: self.delegate.serialize_struct(name, len)?,
1172             })
1173         }
1174 
serialize_struct_variant( self, _name: &'static str, _variant_index: u32, variant: &'static str, len: usize, ) -> Result<Self::SerializeStructVariant, Self::Error>1175         fn serialize_struct_variant(
1176             self,
1177             _name: &'static str,
1178             _variant_index: u32,
1179             variant: &'static str,
1180             len: usize,
1181         ) -> Result<Self::SerializeStructVariant, Self::Error> {
1182             let mut map = self.delegate.serialize_map(Some(1))?;
1183             map.serialize_key(variant)?;
1184             let mapping = Mapping::with_capacity(len);
1185             Ok(SerializeStructVariantAsSingletonMapRecursive { map, mapping })
1186         }
1187 
collect_str<T>(self, value: &T) -> Result<Self::Ok, Self::Error> where T: ?Sized + Display,1188         fn collect_str<T>(self, value: &T) -> Result<Self::Ok, Self::Error>
1189         where
1190             T: ?Sized + Display,
1191         {
1192             self.delegate.collect_str(value)
1193         }
1194 
is_human_readable(&self) -> bool1195         fn is_human_readable(&self) -> bool {
1196             self.delegate.is_human_readable()
1197         }
1198     }
1199 
1200     impl<D> SerializeSeq for SingletonMapRecursive<D>
1201     where
1202         D: SerializeSeq,
1203     {
1204         type Ok = D::Ok;
1205         type Error = D::Error;
1206 
serialize_element<T>(&mut self, elem: &T) -> Result<(), Self::Error> where T: ?Sized + ser::Serialize,1207         fn serialize_element<T>(&mut self, elem: &T) -> Result<(), Self::Error>
1208         where
1209             T: ?Sized + ser::Serialize,
1210         {
1211             self.delegate
1212                 .serialize_element(&SingletonMapRecursive { delegate: elem })
1213         }
1214 
end(self) -> Result<Self::Ok, Self::Error>1215         fn end(self) -> Result<Self::Ok, Self::Error> {
1216             self.delegate.end()
1217         }
1218     }
1219 
1220     impl<D> SerializeTuple for SingletonMapRecursive<D>
1221     where
1222         D: SerializeTuple,
1223     {
1224         type Ok = D::Ok;
1225         type Error = D::Error;
1226 
serialize_element<T>(&mut self, elem: &T) -> Result<(), Self::Error> where T: ?Sized + ser::Serialize,1227         fn serialize_element<T>(&mut self, elem: &T) -> Result<(), Self::Error>
1228         where
1229             T: ?Sized + ser::Serialize,
1230         {
1231             self.delegate
1232                 .serialize_element(&SingletonMapRecursive { delegate: elem })
1233         }
1234 
end(self) -> Result<Self::Ok, Self::Error>1235         fn end(self) -> Result<Self::Ok, Self::Error> {
1236             self.delegate.end()
1237         }
1238     }
1239 
1240     impl<D> SerializeTupleStruct for SingletonMapRecursive<D>
1241     where
1242         D: SerializeTupleStruct,
1243     {
1244         type Ok = D::Ok;
1245         type Error = D::Error;
1246 
serialize_field<V>(&mut self, value: &V) -> Result<(), Self::Error> where V: ?Sized + ser::Serialize,1247         fn serialize_field<V>(&mut self, value: &V) -> Result<(), Self::Error>
1248         where
1249             V: ?Sized + ser::Serialize,
1250         {
1251             self.delegate
1252                 .serialize_field(&SingletonMapRecursive { delegate: value })
1253         }
1254 
end(self) -> Result<Self::Ok, Self::Error>1255         fn end(self) -> Result<Self::Ok, Self::Error> {
1256             self.delegate.end()
1257         }
1258     }
1259 
1260     struct SerializeTupleVariantAsSingletonMapRecursive<M> {
1261         map: M,
1262         sequence: Sequence,
1263     }
1264 
1265     impl<M> SerializeTupleVariant for SerializeTupleVariantAsSingletonMapRecursive<M>
1266     where
1267         M: SerializeMap,
1268     {
1269         type Ok = M::Ok;
1270         type Error = M::Error;
1271 
serialize_field<T>(&mut self, field: &T) -> Result<(), Self::Error> where T: ?Sized + Serialize,1272         fn serialize_field<T>(&mut self, field: &T) -> Result<(), Self::Error>
1273         where
1274             T: ?Sized + Serialize,
1275         {
1276             let value = field
1277                 .serialize(SingletonMapRecursive {
1278                     delegate: crate::value::Serializer,
1279                 })
1280                 .map_err(ser::Error::custom)?;
1281             self.sequence.push(value);
1282             Ok(())
1283         }
1284 
end(mut self) -> Result<Self::Ok, Self::Error>1285         fn end(mut self) -> Result<Self::Ok, Self::Error> {
1286             self.map.serialize_value(&self.sequence)?;
1287             self.map.end()
1288         }
1289     }
1290 
1291     impl<D> SerializeMap for SingletonMapRecursive<D>
1292     where
1293         D: SerializeMap,
1294     {
1295         type Ok = D::Ok;
1296         type Error = D::Error;
1297 
serialize_key<T>(&mut self, key: &T) -> Result<(), Self::Error> where T: ?Sized + ser::Serialize,1298         fn serialize_key<T>(&mut self, key: &T) -> Result<(), Self::Error>
1299         where
1300             T: ?Sized + ser::Serialize,
1301         {
1302             self.delegate
1303                 .serialize_key(&SingletonMapRecursive { delegate: key })
1304         }
1305 
serialize_value<T>(&mut self, value: &T) -> Result<(), Self::Error> where T: ?Sized + ser::Serialize,1306         fn serialize_value<T>(&mut self, value: &T) -> Result<(), Self::Error>
1307         where
1308             T: ?Sized + ser::Serialize,
1309         {
1310             self.delegate
1311                 .serialize_value(&SingletonMapRecursive { delegate: value })
1312         }
1313 
serialize_entry<K, V>(&mut self, key: &K, value: &V) -> Result<(), Self::Error> where K: ?Sized + ser::Serialize, V: ?Sized + ser::Serialize,1314         fn serialize_entry<K, V>(&mut self, key: &K, value: &V) -> Result<(), Self::Error>
1315         where
1316             K: ?Sized + ser::Serialize,
1317             V: ?Sized + ser::Serialize,
1318         {
1319             self.delegate.serialize_entry(
1320                 &SingletonMapRecursive { delegate: key },
1321                 &SingletonMapRecursive { delegate: value },
1322             )
1323         }
1324 
end(self) -> Result<Self::Ok, Self::Error>1325         fn end(self) -> Result<Self::Ok, Self::Error> {
1326             self.delegate.end()
1327         }
1328     }
1329 
1330     impl<D> SerializeStruct for SingletonMapRecursive<D>
1331     where
1332         D: SerializeStruct,
1333     {
1334         type Ok = D::Ok;
1335         type Error = D::Error;
1336 
serialize_field<V>(&mut self, key: &'static str, value: &V) -> Result<(), Self::Error> where V: ?Sized + ser::Serialize,1337         fn serialize_field<V>(&mut self, key: &'static str, value: &V) -> Result<(), Self::Error>
1338         where
1339             V: ?Sized + ser::Serialize,
1340         {
1341             self.delegate
1342                 .serialize_field(key, &SingletonMapRecursive { delegate: value })
1343         }
1344 
end(self) -> Result<Self::Ok, Self::Error>1345         fn end(self) -> Result<Self::Ok, Self::Error> {
1346             self.delegate.end()
1347         }
1348     }
1349 
1350     struct SerializeStructVariantAsSingletonMapRecursive<M> {
1351         map: M,
1352         mapping: Mapping,
1353     }
1354 
1355     impl<M> SerializeStructVariant for SerializeStructVariantAsSingletonMapRecursive<M>
1356     where
1357         M: SerializeMap,
1358     {
1359         type Ok = M::Ok;
1360         type Error = M::Error;
1361 
serialize_field<T>(&mut self, name: &'static str, field: &T) -> Result<(), Self::Error> where T: ?Sized + Serialize,1362         fn serialize_field<T>(&mut self, name: &'static str, field: &T) -> Result<(), Self::Error>
1363         where
1364             T: ?Sized + Serialize,
1365         {
1366             let value = field
1367                 .serialize(SingletonMapRecursive {
1368                     delegate: crate::value::Serializer,
1369                 })
1370                 .map_err(ser::Error::custom)?;
1371             self.mapping.insert(Value::String(name.to_owned()), value);
1372             Ok(())
1373         }
1374 
end(mut self) -> Result<Self::Ok, Self::Error>1375         fn end(mut self) -> Result<Self::Ok, Self::Error> {
1376             self.map.serialize_value(&self.mapping)?;
1377             self.map.end()
1378         }
1379     }
1380 
1381     impl<'de, D> Deserializer<'de> for SingletonMapRecursive<D>
1382     where
1383         D: Deserializer<'de>,
1384     {
1385         type Error = D::Error;
1386 
deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1387         fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1388         where
1389             V: Visitor<'de>,
1390         {
1391             self.delegate
1392                 .deserialize_any(SingletonMapRecursive { delegate: visitor })
1393         }
1394 
deserialize_bool<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1395         fn deserialize_bool<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1396         where
1397             V: Visitor<'de>,
1398         {
1399             self.delegate
1400                 .deserialize_bool(SingletonMapRecursive { delegate: visitor })
1401         }
1402 
deserialize_i8<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1403         fn deserialize_i8<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1404         where
1405             V: Visitor<'de>,
1406         {
1407             self.delegate
1408                 .deserialize_i8(SingletonMapRecursive { delegate: visitor })
1409         }
1410 
deserialize_i16<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1411         fn deserialize_i16<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1412         where
1413             V: Visitor<'de>,
1414         {
1415             self.delegate
1416                 .deserialize_i16(SingletonMapRecursive { delegate: visitor })
1417         }
1418 
deserialize_i32<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1419         fn deserialize_i32<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1420         where
1421             V: Visitor<'de>,
1422         {
1423             self.delegate
1424                 .deserialize_i32(SingletonMapRecursive { delegate: visitor })
1425         }
1426 
deserialize_i64<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1427         fn deserialize_i64<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1428         where
1429             V: Visitor<'de>,
1430         {
1431             self.delegate
1432                 .deserialize_i64(SingletonMapRecursive { delegate: visitor })
1433         }
1434 
deserialize_i128<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1435         fn deserialize_i128<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1436         where
1437             V: Visitor<'de>,
1438         {
1439             self.delegate
1440                 .deserialize_i128(SingletonMapRecursive { delegate: visitor })
1441         }
1442 
deserialize_u8<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1443         fn deserialize_u8<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1444         where
1445             V: Visitor<'de>,
1446         {
1447             self.delegate
1448                 .deserialize_u8(SingletonMapRecursive { delegate: visitor })
1449         }
1450 
deserialize_u16<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1451         fn deserialize_u16<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1452         where
1453             V: Visitor<'de>,
1454         {
1455             self.delegate
1456                 .deserialize_u16(SingletonMapRecursive { delegate: visitor })
1457         }
1458 
deserialize_u32<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1459         fn deserialize_u32<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1460         where
1461             V: Visitor<'de>,
1462         {
1463             self.delegate
1464                 .deserialize_u32(SingletonMapRecursive { delegate: visitor })
1465         }
1466 
deserialize_u64<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1467         fn deserialize_u64<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1468         where
1469             V: Visitor<'de>,
1470         {
1471             self.delegate
1472                 .deserialize_u64(SingletonMapRecursive { delegate: visitor })
1473         }
1474 
deserialize_u128<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1475         fn deserialize_u128<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1476         where
1477             V: Visitor<'de>,
1478         {
1479             self.delegate
1480                 .deserialize_u128(SingletonMapRecursive { delegate: visitor })
1481         }
1482 
deserialize_f32<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1483         fn deserialize_f32<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1484         where
1485             V: Visitor<'de>,
1486         {
1487             self.delegate
1488                 .deserialize_f32(SingletonMapRecursive { delegate: visitor })
1489         }
1490 
deserialize_f64<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1491         fn deserialize_f64<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1492         where
1493             V: Visitor<'de>,
1494         {
1495             self.delegate
1496                 .deserialize_f64(SingletonMapRecursive { delegate: visitor })
1497         }
1498 
deserialize_char<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1499         fn deserialize_char<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1500         where
1501             V: Visitor<'de>,
1502         {
1503             self.delegate
1504                 .deserialize_char(SingletonMapRecursive { delegate: visitor })
1505         }
1506 
deserialize_str<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1507         fn deserialize_str<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1508         where
1509             V: Visitor<'de>,
1510         {
1511             self.delegate
1512                 .deserialize_str(SingletonMapRecursive { delegate: visitor })
1513         }
1514 
deserialize_string<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1515         fn deserialize_string<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1516         where
1517             V: Visitor<'de>,
1518         {
1519             self.delegate
1520                 .deserialize_string(SingletonMapRecursive { delegate: visitor })
1521         }
1522 
deserialize_bytes<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1523         fn deserialize_bytes<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1524         where
1525             V: Visitor<'de>,
1526         {
1527             self.delegate
1528                 .deserialize_bytes(SingletonMapRecursive { delegate: visitor })
1529         }
1530 
deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1531         fn deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1532         where
1533             V: Visitor<'de>,
1534         {
1535             self.delegate
1536                 .deserialize_byte_buf(SingletonMapRecursive { delegate: visitor })
1537         }
1538 
deserialize_option<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1539         fn deserialize_option<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1540         where
1541             V: Visitor<'de>,
1542         {
1543             self.delegate
1544                 .deserialize_option(SingletonMapRecursiveAsEnum {
1545                     name: "",
1546                     delegate: visitor,
1547                 })
1548         }
1549 
deserialize_unit<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1550         fn deserialize_unit<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1551         where
1552             V: Visitor<'de>,
1553         {
1554             self.delegate
1555                 .deserialize_unit(SingletonMapRecursive { delegate: visitor })
1556         }
1557 
deserialize_unit_struct<V>( self, name: &'static str, visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1558         fn deserialize_unit_struct<V>(
1559             self,
1560             name: &'static str,
1561             visitor: V,
1562         ) -> Result<V::Value, Self::Error>
1563         where
1564             V: Visitor<'de>,
1565         {
1566             self.delegate
1567                 .deserialize_unit_struct(name, SingletonMapRecursive { delegate: visitor })
1568         }
1569 
deserialize_newtype_struct<V>( self, name: &'static str, visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1570         fn deserialize_newtype_struct<V>(
1571             self,
1572             name: &'static str,
1573             visitor: V,
1574         ) -> Result<V::Value, Self::Error>
1575         where
1576             V: Visitor<'de>,
1577         {
1578             self.delegate
1579                 .deserialize_newtype_struct(name, SingletonMapRecursive { delegate: visitor })
1580         }
1581 
deserialize_seq<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1582         fn deserialize_seq<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1583         where
1584             V: Visitor<'de>,
1585         {
1586             self.delegate
1587                 .deserialize_seq(SingletonMapRecursive { delegate: visitor })
1588         }
1589 
deserialize_tuple<V>(self, len: usize, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1590         fn deserialize_tuple<V>(self, len: usize, visitor: V) -> Result<V::Value, Self::Error>
1591         where
1592             V: Visitor<'de>,
1593         {
1594             self.delegate
1595                 .deserialize_tuple(len, SingletonMapRecursive { delegate: visitor })
1596         }
1597 
deserialize_tuple_struct<V>( self, name: &'static str, len: usize, visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1598         fn deserialize_tuple_struct<V>(
1599             self,
1600             name: &'static str,
1601             len: usize,
1602             visitor: V,
1603         ) -> Result<V::Value, Self::Error>
1604         where
1605             V: Visitor<'de>,
1606         {
1607             self.delegate.deserialize_tuple_struct(
1608                 name,
1609                 len,
1610                 SingletonMapRecursive { delegate: visitor },
1611             )
1612         }
1613 
deserialize_map<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1614         fn deserialize_map<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1615         where
1616             V: Visitor<'de>,
1617         {
1618             self.delegate
1619                 .deserialize_map(SingletonMapRecursive { delegate: visitor })
1620         }
1621 
deserialize_struct<V>( self, name: &'static str, fields: &'static [&'static str], visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1622         fn deserialize_struct<V>(
1623             self,
1624             name: &'static str,
1625             fields: &'static [&'static str],
1626             visitor: V,
1627         ) -> Result<V::Value, Self::Error>
1628         where
1629             V: Visitor<'de>,
1630         {
1631             self.delegate.deserialize_struct(
1632                 name,
1633                 fields,
1634                 SingletonMapRecursive { delegate: visitor },
1635             )
1636         }
1637 
deserialize_enum<V>( self, name: &'static str, _variants: &'static [&'static str], visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1638         fn deserialize_enum<V>(
1639             self,
1640             name: &'static str,
1641             _variants: &'static [&'static str],
1642             visitor: V,
1643         ) -> Result<V::Value, Self::Error>
1644         where
1645             V: Visitor<'de>,
1646         {
1647             self.delegate.deserialize_any(SingletonMapRecursiveAsEnum {
1648                 name,
1649                 delegate: visitor,
1650             })
1651         }
1652 
deserialize_identifier<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1653         fn deserialize_identifier<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1654         where
1655             V: Visitor<'de>,
1656         {
1657             self.delegate
1658                 .deserialize_identifier(SingletonMapRecursive { delegate: visitor })
1659         }
1660 
deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1661         fn deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1662         where
1663             V: Visitor<'de>,
1664         {
1665             self.delegate
1666                 .deserialize_ignored_any(SingletonMapRecursive { delegate: visitor })
1667         }
1668 
is_human_readable(&self) -> bool1669         fn is_human_readable(&self) -> bool {
1670             self.delegate.is_human_readable()
1671         }
1672     }
1673 
1674     impl<'de, V> Visitor<'de> for SingletonMapRecursive<V>
1675     where
1676         V: Visitor<'de>,
1677     {
1678         type Value = V::Value;
1679 
expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result1680         fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
1681             self.delegate.expecting(formatter)
1682         }
1683 
visit_bool<E>(self, v: bool) -> Result<Self::Value, E> where E: de::Error,1684         fn visit_bool<E>(self, v: bool) -> Result<Self::Value, E>
1685         where
1686             E: de::Error,
1687         {
1688             self.delegate.visit_bool(v)
1689         }
1690 
visit_i8<E>(self, v: i8) -> Result<Self::Value, E> where E: de::Error,1691         fn visit_i8<E>(self, v: i8) -> Result<Self::Value, E>
1692         where
1693             E: de::Error,
1694         {
1695             self.delegate.visit_i8(v)
1696         }
1697 
visit_i16<E>(self, v: i16) -> Result<Self::Value, E> where E: de::Error,1698         fn visit_i16<E>(self, v: i16) -> Result<Self::Value, E>
1699         where
1700             E: de::Error,
1701         {
1702             self.delegate.visit_i16(v)
1703         }
1704 
visit_i32<E>(self, v: i32) -> Result<Self::Value, E> where E: de::Error,1705         fn visit_i32<E>(self, v: i32) -> Result<Self::Value, E>
1706         where
1707             E: de::Error,
1708         {
1709             self.delegate.visit_i32(v)
1710         }
1711 
visit_i64<E>(self, v: i64) -> Result<Self::Value, E> where E: de::Error,1712         fn visit_i64<E>(self, v: i64) -> Result<Self::Value, E>
1713         where
1714             E: de::Error,
1715         {
1716             self.delegate.visit_i64(v)
1717         }
1718 
visit_i128<E>(self, v: i128) -> Result<Self::Value, E> where E: de::Error,1719         fn visit_i128<E>(self, v: i128) -> Result<Self::Value, E>
1720         where
1721             E: de::Error,
1722         {
1723             self.delegate.visit_i128(v)
1724         }
1725 
visit_u8<E>(self, v: u8) -> Result<Self::Value, E> where E: de::Error,1726         fn visit_u8<E>(self, v: u8) -> Result<Self::Value, E>
1727         where
1728             E: de::Error,
1729         {
1730             self.delegate.visit_u8(v)
1731         }
1732 
visit_u16<E>(self, v: u16) -> Result<Self::Value, E> where E: de::Error,1733         fn visit_u16<E>(self, v: u16) -> Result<Self::Value, E>
1734         where
1735             E: de::Error,
1736         {
1737             self.delegate.visit_u16(v)
1738         }
1739 
visit_u32<E>(self, v: u32) -> Result<Self::Value, E> where E: de::Error,1740         fn visit_u32<E>(self, v: u32) -> Result<Self::Value, E>
1741         where
1742             E: de::Error,
1743         {
1744             self.delegate.visit_u32(v)
1745         }
1746 
visit_u64<E>(self, v: u64) -> Result<Self::Value, E> where E: de::Error,1747         fn visit_u64<E>(self, v: u64) -> Result<Self::Value, E>
1748         where
1749             E: de::Error,
1750         {
1751             self.delegate.visit_u64(v)
1752         }
1753 
visit_u128<E>(self, v: u128) -> Result<Self::Value, E> where E: de::Error,1754         fn visit_u128<E>(self, v: u128) -> Result<Self::Value, E>
1755         where
1756             E: de::Error,
1757         {
1758             self.delegate.visit_u128(v)
1759         }
1760 
visit_f32<E>(self, v: f32) -> Result<Self::Value, E> where E: de::Error,1761         fn visit_f32<E>(self, v: f32) -> Result<Self::Value, E>
1762         where
1763             E: de::Error,
1764         {
1765             self.delegate.visit_f32(v)
1766         }
1767 
visit_f64<E>(self, v: f64) -> Result<Self::Value, E> where E: de::Error,1768         fn visit_f64<E>(self, v: f64) -> Result<Self::Value, E>
1769         where
1770             E: de::Error,
1771         {
1772             self.delegate.visit_f64(v)
1773         }
1774 
visit_char<E>(self, v: char) -> Result<Self::Value, E> where E: de::Error,1775         fn visit_char<E>(self, v: char) -> Result<Self::Value, E>
1776         where
1777             E: de::Error,
1778         {
1779             self.delegate.visit_char(v)
1780         }
1781 
visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: de::Error,1782         fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
1783         where
1784             E: de::Error,
1785         {
1786             self.delegate.visit_str(v)
1787         }
1788 
visit_borrowed_str<E>(self, v: &'de str) -> Result<Self::Value, E> where E: de::Error,1789         fn visit_borrowed_str<E>(self, v: &'de str) -> Result<Self::Value, E>
1790         where
1791             E: de::Error,
1792         {
1793             self.delegate.visit_borrowed_str(v)
1794         }
1795 
visit_string<E>(self, v: String) -> Result<Self::Value, E> where E: de::Error,1796         fn visit_string<E>(self, v: String) -> Result<Self::Value, E>
1797         where
1798             E: de::Error,
1799         {
1800             self.delegate.visit_string(v)
1801         }
1802 
visit_bytes<E>(self, v: &[u8]) -> Result<Self::Value, E> where E: de::Error,1803         fn visit_bytes<E>(self, v: &[u8]) -> Result<Self::Value, E>
1804         where
1805             E: de::Error,
1806         {
1807             self.delegate.visit_bytes(v)
1808         }
1809 
visit_borrowed_bytes<E>(self, v: &'de [u8]) -> Result<Self::Value, E> where E: de::Error,1810         fn visit_borrowed_bytes<E>(self, v: &'de [u8]) -> Result<Self::Value, E>
1811         where
1812             E: de::Error,
1813         {
1814             self.delegate.visit_borrowed_bytes(v)
1815         }
1816 
visit_byte_buf<E>(self, v: Vec<u8>) -> Result<Self::Value, E> where E: de::Error,1817         fn visit_byte_buf<E>(self, v: Vec<u8>) -> Result<Self::Value, E>
1818         where
1819             E: de::Error,
1820         {
1821             self.delegate.visit_byte_buf(v)
1822         }
1823 
visit_none<E>(self) -> Result<Self::Value, E> where E: de::Error,1824         fn visit_none<E>(self) -> Result<Self::Value, E>
1825         where
1826             E: de::Error,
1827         {
1828             self.delegate.visit_none()
1829         }
1830 
visit_some<D>(self, deserializer: D) -> Result<Self::Value, D::Error> where D: Deserializer<'de>,1831         fn visit_some<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
1832         where
1833             D: Deserializer<'de>,
1834         {
1835             self.delegate.visit_some(SingletonMapRecursive {
1836                 delegate: deserializer,
1837             })
1838         }
1839 
visit_unit<E>(self) -> Result<Self::Value, E> where E: de::Error,1840         fn visit_unit<E>(self) -> Result<Self::Value, E>
1841         where
1842             E: de::Error,
1843         {
1844             self.delegate.visit_unit()
1845         }
1846 
visit_newtype_struct<D>(self, deserializer: D) -> Result<Self::Value, D::Error> where D: Deserializer<'de>,1847         fn visit_newtype_struct<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
1848         where
1849             D: Deserializer<'de>,
1850         {
1851             self.delegate.visit_newtype_struct(SingletonMapRecursive {
1852                 delegate: deserializer,
1853             })
1854         }
1855 
visit_seq<A>(self, seq: A) -> Result<Self::Value, A::Error> where A: SeqAccess<'de>,1856         fn visit_seq<A>(self, seq: A) -> Result<Self::Value, A::Error>
1857         where
1858             A: SeqAccess<'de>,
1859         {
1860             self.delegate
1861                 .visit_seq(SingletonMapRecursive { delegate: seq })
1862         }
1863 
visit_map<A>(self, map: A) -> Result<Self::Value, A::Error> where A: MapAccess<'de>,1864         fn visit_map<A>(self, map: A) -> Result<Self::Value, A::Error>
1865         where
1866             A: MapAccess<'de>,
1867         {
1868             self.delegate
1869                 .visit_map(SingletonMapRecursive { delegate: map })
1870         }
1871     }
1872 
1873     impl<'de, T> DeserializeSeed<'de> for SingletonMapRecursive<T>
1874     where
1875         T: DeserializeSeed<'de>,
1876     {
1877         type Value = T::Value;
1878 
deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error> where D: Deserializer<'de>,1879         fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
1880         where
1881             D: Deserializer<'de>,
1882         {
1883             self.delegate.deserialize(SingletonMapRecursive {
1884                 delegate: deserializer,
1885             })
1886         }
1887     }
1888 
1889     impl<'de, S> SeqAccess<'de> for SingletonMapRecursive<S>
1890     where
1891         S: SeqAccess<'de>,
1892     {
1893         type Error = S::Error;
1894 
next_element_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>, Self::Error> where T: DeserializeSeed<'de>,1895         fn next_element_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>, Self::Error>
1896         where
1897             T: DeserializeSeed<'de>,
1898         {
1899             self.delegate
1900                 .next_element_seed(SingletonMapRecursive { delegate: seed })
1901         }
1902     }
1903 
1904     impl<'de, M> MapAccess<'de> for SingletonMapRecursive<M>
1905     where
1906         M: MapAccess<'de>,
1907     {
1908         type Error = M::Error;
1909 
next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>, Self::Error> where K: DeserializeSeed<'de>,1910         fn next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>, Self::Error>
1911         where
1912             K: DeserializeSeed<'de>,
1913         {
1914             self.delegate
1915                 .next_key_seed(SingletonMapRecursive { delegate: seed })
1916         }
1917 
next_value_seed<V>(&mut self, seed: V) -> Result<V::Value, Self::Error> where V: DeserializeSeed<'de>,1918         fn next_value_seed<V>(&mut self, seed: V) -> Result<V::Value, Self::Error>
1919         where
1920             V: DeserializeSeed<'de>,
1921         {
1922             self.delegate
1923                 .next_value_seed(SingletonMapRecursive { delegate: seed })
1924         }
1925     }
1926 
1927     struct SingletonMapRecursiveAsEnum<D> {
1928         name: &'static str,
1929         delegate: D,
1930     }
1931 
1932     impl<'de, V> Visitor<'de> for SingletonMapRecursiveAsEnum<V>
1933     where
1934         V: Visitor<'de>,
1935     {
1936         type Value = V::Value;
1937 
expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result1938         fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
1939             self.delegate.expecting(formatter)
1940         }
1941 
visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: de::Error,1942         fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
1943         where
1944             E: de::Error,
1945         {
1946             self.delegate.visit_enum(de::value::StrDeserializer::new(v))
1947         }
1948 
visit_borrowed_str<E>(self, v: &'de str) -> Result<Self::Value, E> where E: de::Error,1949         fn visit_borrowed_str<E>(self, v: &'de str) -> Result<Self::Value, E>
1950         where
1951             E: de::Error,
1952         {
1953             self.delegate
1954                 .visit_enum(de::value::BorrowedStrDeserializer::new(v))
1955         }
1956 
visit_string<E>(self, v: String) -> Result<Self::Value, E> where E: de::Error,1957         fn visit_string<E>(self, v: String) -> Result<Self::Value, E>
1958         where
1959             E: de::Error,
1960         {
1961             self.delegate
1962                 .visit_enum(de::value::StringDeserializer::new(v))
1963         }
1964 
visit_none<E>(self) -> Result<Self::Value, E> where E: de::Error,1965         fn visit_none<E>(self) -> Result<Self::Value, E>
1966         where
1967             E: de::Error,
1968         {
1969             self.delegate.visit_none()
1970         }
1971 
visit_some<D>(self, deserializer: D) -> Result<Self::Value, D::Error> where D: Deserializer<'de>,1972         fn visit_some<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
1973         where
1974             D: Deserializer<'de>,
1975         {
1976             self.delegate.visit_some(SingletonMapRecursive {
1977                 delegate: deserializer,
1978             })
1979         }
1980 
visit_unit<E>(self) -> Result<Self::Value, E> where E: de::Error,1981         fn visit_unit<E>(self) -> Result<Self::Value, E>
1982         where
1983             E: de::Error,
1984         {
1985             self.delegate.visit_unit()
1986         }
1987 
visit_map<A>(self, map: A) -> Result<Self::Value, A::Error> where A: MapAccess<'de>,1988         fn visit_map<A>(self, map: A) -> Result<Self::Value, A::Error>
1989         where
1990             A: MapAccess<'de>,
1991         {
1992             self.delegate.visit_enum(SingletonMapRecursiveAsEnum {
1993                 name: self.name,
1994                 delegate: map,
1995             })
1996         }
1997     }
1998 
1999     impl<'de, D> EnumAccess<'de> for SingletonMapRecursiveAsEnum<D>
2000     where
2001         D: MapAccess<'de>,
2002     {
2003         type Error = D::Error;
2004         type Variant = Self;
2005 
variant_seed<V>(mut self, seed: V) -> Result<(V::Value, Self::Variant), Self::Error> where V: DeserializeSeed<'de>,2006         fn variant_seed<V>(mut self, seed: V) -> Result<(V::Value, Self::Variant), Self::Error>
2007         where
2008             V: DeserializeSeed<'de>,
2009         {
2010             match self.delegate.next_key_seed(seed)? {
2011                 Some(value) => Ok((value, self)),
2012                 None => Err(de::Error::invalid_value(
2013                     Unexpected::Map,
2014                     &"map with a single key",
2015                 )),
2016             }
2017         }
2018     }
2019 
2020     impl<'de, D> VariantAccess<'de> for SingletonMapRecursiveAsEnum<D>
2021     where
2022         D: MapAccess<'de>,
2023     {
2024         type Error = D::Error;
2025 
unit_variant(self) -> Result<(), Self::Error>2026         fn unit_variant(self) -> Result<(), Self::Error> {
2027             Err(de::Error::invalid_type(Unexpected::Map, &"unit variant"))
2028         }
2029 
newtype_variant_seed<T>(mut self, seed: T) -> Result<T::Value, Self::Error> where T: DeserializeSeed<'de>,2030         fn newtype_variant_seed<T>(mut self, seed: T) -> Result<T::Value, Self::Error>
2031         where
2032             T: DeserializeSeed<'de>,
2033         {
2034             let value = self
2035                 .delegate
2036                 .next_value_seed(SingletonMapRecursive { delegate: seed })?;
2037             match self.delegate.next_key()? {
2038                 None => Ok(value),
2039                 Some(IgnoredAny) => Err(de::Error::invalid_value(
2040                     Unexpected::Map,
2041                     &"map with a single key",
2042                 )),
2043             }
2044         }
2045 
tuple_variant<V>(mut self, len: usize, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,2046         fn tuple_variant<V>(mut self, len: usize, visitor: V) -> Result<V::Value, Self::Error>
2047         where
2048             V: Visitor<'de>,
2049         {
2050             let value = self.delegate.next_value_seed(TupleVariantSeed {
2051                 len,
2052                 visitor: SingletonMapRecursive { delegate: visitor },
2053             })?;
2054             match self.delegate.next_key()? {
2055                 None => Ok(value),
2056                 Some(IgnoredAny) => Err(de::Error::invalid_value(
2057                     Unexpected::Map,
2058                     &"map with a single key",
2059                 )),
2060             }
2061         }
2062 
struct_variant<V>( mut self, fields: &'static [&'static str], visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,2063         fn struct_variant<V>(
2064             mut self,
2065             fields: &'static [&'static str],
2066             visitor: V,
2067         ) -> Result<V::Value, Self::Error>
2068         where
2069             V: Visitor<'de>,
2070         {
2071             let value = self.delegate.next_value_seed(StructVariantSeed {
2072                 name: self.name,
2073                 fields,
2074                 visitor: SingletonMapRecursive { delegate: visitor },
2075             })?;
2076             match self.delegate.next_key()? {
2077                 None => Ok(value),
2078                 Some(IgnoredAny) => Err(de::Error::invalid_value(
2079                     Unexpected::Map,
2080                     &"map with a single key",
2081                 )),
2082             }
2083         }
2084     }
2085 
2086     struct TupleVariantSeed<V> {
2087         len: usize,
2088         visitor: V,
2089     }
2090 
2091     impl<'de, V> DeserializeSeed<'de> for TupleVariantSeed<V>
2092     where
2093         V: Visitor<'de>,
2094     {
2095         type Value = V::Value;
2096 
deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error> where D: Deserializer<'de>,2097         fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
2098         where
2099             D: Deserializer<'de>,
2100         {
2101             deserializer.deserialize_tuple(self.len, self.visitor)
2102         }
2103     }
2104 
2105     struct StructVariantSeed<V> {
2106         name: &'static str,
2107         fields: &'static [&'static str],
2108         visitor: V,
2109     }
2110 
2111     impl<'de, V> DeserializeSeed<'de> for StructVariantSeed<V>
2112     where
2113         V: Visitor<'de>,
2114     {
2115         type Value = V::Value;
2116 
deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error> where D: Deserializer<'de>,2117         fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
2118         where
2119             D: Deserializer<'de>,
2120         {
2121             deserializer.deserialize_struct(self.name, self.fields, self.visitor)
2122         }
2123     }
2124 }
2125