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