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