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