1use crate::{
2 content::{
3 de::{Content as DeContent, ContentDeserializer},
4 ser::{Content as SerContent, ContentSerializer},
5 },
6 prelude::*,
7};
8
9pub struct KeyValueMap<T>(PhantomData<T>);
158
159impl<T, TAs> SerializeAs<Vec<T>> for KeyValueMap<TAs>
160where
161 TAs: SerializeAs<T>,
162{
163 fn serialize_as<S>(source: &Vec<T>, serializer: S) -> Result<S::Ok, S::Error>
164 where
165 S: Serializer,
166 {
167 <Vec<TAs>>::serialize_as(source, SeqAsMapSerializer(serializer))
168 }
169}
170
171impl<'de, T, TAs> DeserializeAs<'de, Vec<T>> for KeyValueMap<TAs>
172where
173 TAs: DeserializeAs<'de, T>,
174{
175 fn deserialize_as<D>(deserializer: D) -> Result<Vec<T>, D::Error>
176 where
177 D: Deserializer<'de>,
178 {
179 struct KeyValueMapVisitor<T, TAs> {
180 is_human_readable: bool,
181 phantom: PhantomData<(T, TAs)>,
182 }
183
184 impl<'de, T, TAs> Visitor<'de> for KeyValueMapVisitor<T, TAs>
185 where
186 TAs: DeserializeAs<'de, T>,
187 {
188 type Value = Vec<T>;
189
190 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
191 formatter.write_str("a map")
192 }
193
194 fn visit_map<A: MapAccess<'de>>(self, map: A) -> Result<Self::Value, A::Error> {
195 <Vec<TAs>>::deserialize_as(SeqDeserializer {
196 delegate: map,
197 is_human_readable: self.is_human_readable,
198 })
199 }
200 }
201
202 let is_human_readable = deserializer.is_human_readable();
203 deserializer.deserialize_map(KeyValueMapVisitor::<T, TAs> {
204 is_human_readable,
205 phantom: PhantomData,
206 })
207 }
208}
209
210static MAP_KEY_IDENTIFIER: &str = "$key$";
216
217struct SeqAsMapSerializer<S>(S);
222
223impl<S> Serializer for SeqAsMapSerializer<S>
224where
225 S: Serializer,
226{
227 type Ok = S::Ok;
228 type Error = S::Error;
229
230 type SerializeSeq = SerializeSeqElement<S::SerializeMap>;
231 type SerializeTuple = Impossible<S::Ok, S::Error>;
232 type SerializeTupleStruct = Impossible<S::Ok, S::Error>;
233 type SerializeTupleVariant = Impossible<S::Ok, S::Error>;
234 type SerializeMap = Impossible<S::Ok, S::Error>;
235 type SerializeStruct = Impossible<S::Ok, S::Error>;
236 type SerializeStructVariant = Impossible<S::Ok, S::Error>;
237
238 fn serialize_bool(self, _v: bool) -> Result<Self::Ok, Self::Error> {
239 Err(SerError::custom("wrong type for KeyValueMap"))
240 }
241
242 fn serialize_i8(self, _v: i8) -> Result<Self::Ok, Self::Error> {
243 Err(SerError::custom("wrong type for KeyValueMap"))
244 }
245
246 fn serialize_i16(self, _v: i16) -> Result<Self::Ok, Self::Error> {
247 Err(SerError::custom("wrong type for KeyValueMap"))
248 }
249
250 fn serialize_i32(self, _v: i32) -> Result<Self::Ok, Self::Error> {
251 Err(SerError::custom("wrong type for KeyValueMap"))
252 }
253
254 fn serialize_i64(self, _v: i64) -> Result<Self::Ok, Self::Error> {
255 Err(SerError::custom("wrong type for KeyValueMap"))
256 }
257
258 fn serialize_i128(self, _v: i128) -> Result<Self::Ok, Self::Error> {
259 Err(SerError::custom("wrong type for KeyValueMap"))
260 }
261
262 fn serialize_u8(self, _v: u8) -> Result<Self::Ok, Self::Error> {
263 Err(SerError::custom("wrong type for KeyValueMap"))
264 }
265
266 fn serialize_u16(self, _v: u16) -> Result<Self::Ok, Self::Error> {
267 Err(SerError::custom("wrong type for KeyValueMap"))
268 }
269
270 fn serialize_u32(self, _v: u32) -> Result<Self::Ok, Self::Error> {
271 Err(SerError::custom("wrong type for KeyValueMap"))
272 }
273
274 fn serialize_u64(self, _v: u64) -> Result<Self::Ok, Self::Error> {
275 Err(SerError::custom("wrong type for KeyValueMap"))
276 }
277
278 fn serialize_u128(self, _v: u128) -> Result<Self::Ok, Self::Error> {
279 Err(SerError::custom("wrong type for KeyValueMap"))
280 }
281
282 fn serialize_f32(self, _v: f32) -> Result<Self::Ok, Self::Error> {
283 Err(SerError::custom("wrong type for KeyValueMap"))
284 }
285
286 fn serialize_f64(self, _v: f64) -> Result<Self::Ok, Self::Error> {
287 Err(SerError::custom("wrong type for KeyValueMap"))
288 }
289
290 fn serialize_char(self, _v: char) -> Result<Self::Ok, Self::Error> {
291 Err(SerError::custom("wrong type for KeyValueMap"))
292 }
293
294 fn serialize_str(self, _v: &str) -> Result<Self::Ok, Self::Error> {
295 Err(SerError::custom("wrong type for KeyValueMap"))
296 }
297
298 fn serialize_bytes(self, _v: &[u8]) -> Result<Self::Ok, Self::Error> {
299 Err(SerError::custom("wrong type for KeyValueMap"))
300 }
301
302 fn serialize_none(self) -> Result<Self::Ok, Self::Error> {
303 Err(SerError::custom("wrong type for KeyValueMap"))
304 }
305
306 fn serialize_some<T>(self, _value: &T) -> Result<Self::Ok, Self::Error>
307 where
308 T: Serialize + ?Sized,
309 {
310 Err(SerError::custom("wrong type for KeyValueMap"))
311 }
312
313 fn serialize_unit(self) -> Result<Self::Ok, Self::Error> {
314 Err(SerError::custom("wrong type for KeyValueMap"))
315 }
316
317 fn serialize_unit_struct(self, _name: &'static str) -> Result<Self::Ok, Self::Error> {
318 Err(SerError::custom("wrong type for KeyValueMap"))
319 }
320
321 fn serialize_unit_variant(
322 self,
323 _name: &'static str,
324 _variant_index: u32,
325 _variant: &'static str,
326 ) -> Result<Self::Ok, Self::Error> {
327 Err(SerError::custom("wrong type for KeyValueMap"))
328 }
329
330 fn serialize_newtype_struct<T>(
331 self,
332 _name: &'static str,
333 _value: &T,
334 ) -> Result<Self::Ok, Self::Error>
335 where
336 T: Serialize + ?Sized,
337 {
338 Err(SerError::custom("wrong type for KeyValueMap"))
339 }
340
341 fn serialize_newtype_variant<T>(
342 self,
343 _name: &'static str,
344 _variant_index: u32,
345 _variant: &'static str,
346 _value: &T,
347 ) -> Result<Self::Ok, Self::Error>
348 where
349 T: Serialize + ?Sized,
350 {
351 Err(SerError::custom("wrong type for KeyValueMap"))
352 }
353
354 fn serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq, Self::Error> {
355 let is_human_readable = self.0.is_human_readable();
356 self.0
357 .serialize_map(len)
358 .map(|delegate| SerializeSeqElement {
359 delegate,
360 is_human_readable,
361 })
362 }
363
364 fn serialize_tuple(self, _len: usize) -> Result<Self::SerializeTuple, Self::Error> {
365 Err(SerError::custom("wrong type for KeyValueMap"))
366 }
367
368 fn serialize_tuple_struct(
369 self,
370 _name: &'static str,
371 _len: usize,
372 ) -> Result<Self::SerializeTupleStruct, Self::Error> {
373 Err(SerError::custom("wrong type for KeyValueMap"))
374 }
375
376 fn serialize_tuple_variant(
377 self,
378 _name: &'static str,
379 _variant_index: u32,
380 _variant: &'static str,
381 _len: usize,
382 ) -> Result<Self::SerializeTupleVariant, Self::Error> {
383 Err(SerError::custom("wrong type for KeyValueMap"))
384 }
385
386 fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap, Self::Error> {
387 Err(SerError::custom("wrong type for KeyValueMap"))
388 }
389
390 fn serialize_struct(
391 self,
392 _name: &'static str,
393 _len: usize,
394 ) -> Result<Self::SerializeStruct, Self::Error> {
395 Err(SerError::custom("wrong type for KeyValueMap"))
396 }
397
398 fn serialize_struct_variant(
399 self,
400 _name: &'static str,
401 _variant_index: u32,
402 _variant: &'static str,
403 _len: usize,
404 ) -> Result<Self::SerializeStructVariant, Self::Error> {
405 Err(SerError::custom("wrong type for KeyValueMap"))
406 }
407
408 fn is_human_readable(&self) -> bool {
409 self.0.is_human_readable()
410 }
411}
412
413struct SerializeSeqElement<M> {
419 delegate: M,
420 is_human_readable: bool,
421}
422
423impl<M> SerializeSeq for SerializeSeqElement<M>
424where
425 M: SerializeMap,
426{
427 type Ok = M::Ok;
428 type Error = M::Error;
429
430 fn serialize_element<T>(&mut self, value: &T) -> Result<(), Self::Error>
431 where
432 T: Serialize + ?Sized,
433 {
434 value.serialize(ElementAsKeyValueSerializer {
435 delegate: &mut self.delegate,
436 is_human_readable: self.is_human_readable,
437 })?;
438 Ok(())
439 }
440
441 fn end(self) -> Result<Self::Ok, Self::Error> {
442 self.delegate.end()
443 }
444}
445
446struct ElementAsKeyValueSerializer<'a, M> {
447 delegate: &'a mut M,
448 is_human_readable: bool,
449}
450
451impl<'a, M> Serializer for ElementAsKeyValueSerializer<'a, M>
452where
453 M: SerializeMap,
454{
455 type Ok = ();
456 type Error = M::Error;
457
458 type SerializeSeq = KeyValueSeqSerializer<'a, M>;
459 type SerializeTuple = KeyValueTupleSerializer<'a, M>;
460 type SerializeTupleStruct = KeyValueTupleStructSerializer<'a, M>;
461 type SerializeTupleVariant = Impossible<Self::Ok, Self::Error>;
462 type SerializeMap = KeyValueMapSerializer<'a, M>;
463 type SerializeStruct = KeyValueStructSerializer<'a, M>;
464 type SerializeStructVariant = Impossible<Self::Ok, Self::Error>;
465
466 fn serialize_bool(self, _v: bool) -> Result<Self::Ok, Self::Error> {
467 Err(SerError::custom("wrong type for KeyValueMap"))
468 }
469
470 fn serialize_i8(self, _v: i8) -> Result<Self::Ok, Self::Error> {
471 Err(SerError::custom("wrong type for KeyValueMap"))
472 }
473
474 fn serialize_i16(self, _v: i16) -> Result<Self::Ok, Self::Error> {
475 Err(SerError::custom("wrong type for KeyValueMap"))
476 }
477
478 fn serialize_i32(self, _v: i32) -> Result<Self::Ok, Self::Error> {
479 Err(SerError::custom("wrong type for KeyValueMap"))
480 }
481
482 fn serialize_i64(self, _v: i64) -> Result<Self::Ok, Self::Error> {
483 Err(SerError::custom("wrong type for KeyValueMap"))
484 }
485
486 fn serialize_i128(self, _v: i128) -> Result<Self::Ok, Self::Error> {
487 Err(SerError::custom("wrong type for KeyValueMap"))
488 }
489
490 fn serialize_u8(self, _v: u8) -> Result<Self::Ok, Self::Error> {
491 Err(SerError::custom("wrong type for KeyValueMap"))
492 }
493
494 fn serialize_u16(self, _v: u16) -> Result<Self::Ok, Self::Error> {
495 Err(SerError::custom("wrong type for KeyValueMap"))
496 }
497
498 fn serialize_u32(self, _v: u32) -> Result<Self::Ok, Self::Error> {
499 Err(SerError::custom("wrong type for KeyValueMap"))
500 }
501
502 fn serialize_u64(self, _v: u64) -> Result<Self::Ok, Self::Error> {
503 Err(SerError::custom("wrong type for KeyValueMap"))
504 }
505
506 fn serialize_u128(self, _v: u128) -> Result<Self::Ok, Self::Error> {
507 Err(SerError::custom("wrong type for KeyValueMap"))
508 }
509
510 fn serialize_f32(self, _v: f32) -> Result<Self::Ok, Self::Error> {
511 Err(SerError::custom("wrong type for KeyValueMap"))
512 }
513
514 fn serialize_f64(self, _v: f64) -> Result<Self::Ok, Self::Error> {
515 Err(SerError::custom("wrong type for KeyValueMap"))
516 }
517
518 fn serialize_char(self, _v: char) -> Result<Self::Ok, Self::Error> {
519 Err(SerError::custom("wrong type for KeyValueMap"))
520 }
521
522 fn serialize_str(self, _v: &str) -> Result<Self::Ok, Self::Error> {
523 Err(SerError::custom("wrong type for KeyValueMap"))
524 }
525
526 fn serialize_bytes(self, _v: &[u8]) -> Result<Self::Ok, Self::Error> {
527 Err(SerError::custom("wrong type for KeyValueMap"))
528 }
529
530 fn serialize_none(self) -> Result<Self::Ok, Self::Error> {
531 Err(SerError::custom("wrong type for KeyValueMap"))
532 }
533
534 fn serialize_some<T>(self, _value: &T) -> Result<Self::Ok, Self::Error>
535 where
536 T: Serialize + ?Sized,
537 {
538 Err(SerError::custom("wrong type for KeyValueMap"))
539 }
540
541 fn serialize_unit(self) -> Result<Self::Ok, Self::Error> {
542 Err(SerError::custom("wrong type for KeyValueMap"))
543 }
544
545 fn serialize_unit_struct(self, _name: &'static str) -> Result<Self::Ok, Self::Error> {
546 Err(SerError::custom("wrong type for KeyValueMap"))
547 }
548
549 fn serialize_unit_variant(
550 self,
551 _name: &'static str,
552 _variant_index: u32,
553 _variant: &'static str,
554 ) -> Result<Self::Ok, Self::Error> {
555 Err(SerError::custom("wrong type for KeyValueMap"))
556 }
557
558 fn serialize_newtype_struct<T>(
559 self,
560 _name: &'static str,
561 _value: &T,
562 ) -> Result<Self::Ok, Self::Error>
563 where
564 T: Serialize + ?Sized,
565 {
566 Err(SerError::custom("wrong type for KeyValueMap"))
567 }
568
569 fn serialize_newtype_variant<T>(
570 self,
571 _name: &'static str,
572 _variant_index: u32,
573 _variant: &'static str,
574 _value: &T,
575 ) -> Result<Self::Ok, Self::Error>
576 where
577 T: Serialize + ?Sized,
578 {
579 Err(SerError::custom("wrong type for KeyValueMap"))
580 }
581
582 fn serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq, Self::Error> {
583 Ok(KeyValueSeqSerializer {
584 delegate: self.delegate,
585 is_human_readable: self.is_human_readable,
586 content: utils::vec_with_capacity_cautious(Some(len.unwrap_or(17).saturating_sub(1))),
587 key: None,
588 })
589 }
590
591 fn serialize_tuple(self, len: usize) -> Result<Self::SerializeTuple, Self::Error> {
592 Ok(KeyValueTupleSerializer {
593 delegate: self.delegate,
594 is_human_readable: self.is_human_readable,
595 content: utils::vec_with_capacity_cautious(Some(len.saturating_sub(1))),
596 key: None,
597 })
598 }
599
600 fn serialize_tuple_struct(
601 self,
602 name: &'static str,
603 len: usize,
604 ) -> Result<Self::SerializeTupleStruct, Self::Error> {
605 Ok(KeyValueTupleStructSerializer {
606 delegate: self.delegate,
607 is_human_readable: self.is_human_readable,
608 name,
609 content: utils::vec_with_capacity_cautious(Some(len.saturating_sub(1))),
610 key: None,
611 })
612 }
613
614 fn serialize_tuple_variant(
615 self,
616 _name: &'static str,
617 _variant_index: u32,
618 _variant: &'static str,
619 _len: usize,
620 ) -> Result<Self::SerializeTupleVariant, Self::Error> {
621 Err(SerError::custom("wrong type for KeyValueMap"))
622 }
623
624 fn serialize_map(self, len: Option<usize>) -> Result<Self::SerializeMap, Self::Error> {
625 Ok(KeyValueMapSerializer {
626 delegate: self.delegate,
627 is_human_readable: self.is_human_readable,
628 content: utils::vec_with_capacity_cautious(Some(len.unwrap_or(17).saturating_sub(1))),
629 next_is_magic_key: false,
630 key: None,
631 tmp: None,
632 })
633 }
634
635 fn serialize_struct(
636 self,
637 name: &'static str,
638 len: usize,
639 ) -> Result<Self::SerializeStruct, Self::Error> {
640 Ok(KeyValueStructSerializer {
641 delegate: self.delegate,
642 is_human_readable: self.is_human_readable,
643 name,
644 content: utils::vec_with_capacity_cautious(Some(len.saturating_sub(1))),
645 key: None,
646 })
647 }
648
649 fn serialize_struct_variant(
650 self,
651 _name: &'static str,
652 _variant_index: u32,
653 _variant: &'static str,
654 _len: usize,
655 ) -> Result<Self::SerializeStructVariant, Self::Error> {
656 Err(SerError::custom("wrong type for KeyValueMap"))
657 }
658
659 fn is_human_readable(&self) -> bool {
660 self.is_human_readable
661 }
662}
663
664struct KeyValueSeqSerializer<'a, M> {
668 delegate: &'a mut M,
669 is_human_readable: bool,
670 content: Vec<SerContent>,
671 key: Option<SerContent>,
672}
673
674impl<M> SerializeSeq for KeyValueSeqSerializer<'_, M>
675where
676 M: SerializeMap,
677{
678 type Ok = ();
679 type Error = M::Error;
680
681 fn serialize_element<T>(&mut self, element: &T) -> Result<(), Self::Error>
682 where
683 T: Serialize + ?Sized,
684 {
685 let element: SerContent =
686 element.serialize(ContentSerializer::new(self.is_human_readable))?;
687 if self.key.is_none() {
688 self.key = Some(element);
689 return Ok(());
690 }
691 self.content.push(element);
692 Ok(())
693 }
694
695 fn end(self) -> Result<Self::Ok, Self::Error> {
696 if let Some(key) = self.key {
697 self.delegate
698 .serialize_entry(&key, &SerContent::Seq(self.content))
699 } else {
700 Err(SerError::custom("missing value for `$key$` field"))
701 }
702 }
703}
704
705struct KeyValueTupleSerializer<'a, M> {
709 delegate: &'a mut M,
710 is_human_readable: bool,
711 content: Vec<SerContent>,
712 key: Option<SerContent>,
713}
714
715impl<M> SerializeTuple for KeyValueTupleSerializer<'_, M>
716where
717 M: SerializeMap,
718{
719 type Ok = ();
720 type Error = M::Error;
721
722 fn serialize_element<T>(&mut self, element: &T) -> Result<(), Self::Error>
723 where
724 T: Serialize + ?Sized,
725 {
726 let element: SerContent =
727 element.serialize(ContentSerializer::new(self.is_human_readable))?;
728 if self.key.is_none() {
729 self.key = Some(element);
730 return Ok(());
731 }
732 self.content.push(element);
733 Ok(())
734 }
735
736 fn end(self) -> Result<Self::Ok, Self::Error> {
737 if let Some(key) = self.key {
738 self.delegate
739 .serialize_entry(&key, &SerContent::Tuple(self.content))
740 } else {
741 Err(SerError::custom("missing value for `$key$` field"))
742 }
743 }
744}
745
746struct KeyValueTupleStructSerializer<'a, M> {
750 delegate: &'a mut M,
751 is_human_readable: bool,
752 name: &'static str,
753 content: Vec<SerContent>,
754 key: Option<SerContent>,
755}
756
757impl<M> SerializeTupleStruct for KeyValueTupleStructSerializer<'_, M>
758where
759 M: SerializeMap,
760{
761 type Ok = ();
762 type Error = M::Error;
763
764 fn serialize_field<T>(&mut self, field: &T) -> Result<(), Self::Error>
765 where
766 T: Serialize + ?Sized,
767 {
768 let field: SerContent = field.serialize(ContentSerializer::new(self.is_human_readable))?;
769 if self.key.is_none() {
770 self.key = Some(field);
771 return Ok(());
772 }
773 self.content.push(field);
774 Ok(())
775 }
776
777 fn end(self) -> Result<Self::Ok, Self::Error> {
778 if let Some(key) = self.key {
779 self.delegate
780 .serialize_entry(&key, &SerContent::TupleStruct(self.name, self.content))
781 } else {
782 Err(SerError::custom("missing value for `$key$` field"))
783 }
784 }
785}
786
787struct KeyValueMapSerializer<'a, M> {
791 delegate: &'a mut M,
792 is_human_readable: bool,
793 content: Vec<(SerContent, SerContent)>,
794 next_is_magic_key: bool,
795 key: Option<SerContent>,
796 tmp: Option<SerContent>,
797}
798
799impl<M> SerializeMap for KeyValueMapSerializer<'_, M>
800where
801 M: SerializeMap,
802{
803 type Ok = ();
804 type Error = M::Error;
805
806 fn serialize_key<T>(&mut self, key: &T) -> Result<(), Self::Error>
807 where
808 T: Serialize + ?Sized,
809 {
810 let key: SerContent = key.serialize(ContentSerializer::new(self.is_human_readable))?;
811 if key.as_str() == Some(MAP_KEY_IDENTIFIER) {
812 self.next_is_magic_key = true;
813 return Ok(());
814 }
815 self.tmp = Some(key);
816 Ok(())
817 }
818
819 fn serialize_value<T>(&mut self, value: &T) -> Result<(), Self::Error>
820 where
821 T: Serialize + ?Sized,
822 {
823 let value: SerContent = value.serialize(ContentSerializer::new(self.is_human_readable))?;
824
825 if self.next_is_magic_key {
826 self.next_is_magic_key = false;
827 self.key = Some(value);
828 return Ok(());
829 }
830 self.content.push((
831 self.tmp
832 .take()
833 .expect("serialize_value called before serialize_key"),
834 value,
835 ));
836 Ok(())
837 }
838
839 fn end(self) -> Result<Self::Ok, Self::Error> {
840 if let Some(key) = self.key {
841 self.delegate
842 .serialize_entry(&key, &SerContent::Map(self.content))
843 } else {
844 Err(SerError::custom("missing value for `$key$` field"))
845 }
846 }
847}
848
849struct KeyValueStructSerializer<'a, M> {
853 delegate: &'a mut M,
854 is_human_readable: bool,
855 name: &'static str,
856 content: Vec<(&'static str, SerContent)>,
857 key: Option<SerContent>,
858}
859
860impl<M> SerializeStruct for KeyValueStructSerializer<'_, M>
861where
862 M: SerializeMap,
863{
864 type Ok = ();
865 type Error = M::Error;
866
867 fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<(), Self::Error>
868 where
869 T: Serialize + ?Sized,
870 {
871 let value: SerContent = value.serialize(ContentSerializer::new(self.is_human_readable))?;
873
874 if key == MAP_KEY_IDENTIFIER {
875 self.key = Some(value);
876 return Ok(());
877 }
878 self.content.push((key, value));
879 Ok(())
880 }
881
882 fn end(self) -> Result<Self::Ok, Self::Error> {
883 if let Some(key) = self.key {
884 self.delegate
885 .serialize_entry(&key, &SerContent::Struct(self.name, self.content))
886 } else {
887 Err(SerError::custom("missing value for `$key$` field"))
888 }
889 }
890}
891
892struct SeqDeserializer<M> {
898 delegate: M,
899 is_human_readable: bool,
900}
901
902impl<'de, M> Deserializer<'de> for SeqDeserializer<M>
903where
904 M: MapAccess<'de>,
905{
906 type Error = M::Error;
907
908 fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
909 where
910 V: Visitor<'de>,
911 {
912 self.deserialize_seq(visitor)
913 }
914
915 fn deserialize_seq<V>(self, visitor: V) -> Result<V::Value, Self::Error>
916 where
917 V: Visitor<'de>,
918 {
919 visitor.visit_seq(self)
920 }
921
922 fn is_human_readable(&self) -> bool {
923 self.is_human_readable
924 }
925
926 forward_to_deserialize_any! {
927 bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
928 bytes byte_buf option unit unit_struct newtype_struct tuple
929 tuple_struct map struct enum identifier ignored_any
930 }
931}
932
933impl<'de, M> SeqAccess<'de> for SeqDeserializer<M>
934where
935 M: MapAccess<'de>,
936{
937 type Error = M::Error;
938
939 fn next_element_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>, Self::Error>
940 where
941 T: DeserializeSeed<'de>,
942 {
943 let key_value: Option<DeContent<'de>> = self.delegate.next_key()?;
944 if let Some(key_value) = key_value {
945 seed.deserialize(MapKeyDeserializer {
946 delegate: &mut self.delegate,
947 is_human_readable: self.is_human_readable,
948 key_value,
949 })
950 .map(Some)
951 } else {
952 Ok(None)
953 }
954 }
955
956 fn size_hint(&self) -> Option<usize> {
957 self.delegate.size_hint()
958 }
959}
960
961struct MapKeyDeserializer<'de, M> {
962 delegate: M,
963 is_human_readable: bool,
964 key_value: DeContent<'de>,
965}
966
967impl<'de, M> Deserializer<'de> for MapKeyDeserializer<'de, M>
968where
969 M: MapAccess<'de>,
970{
971 type Error = M::Error;
972
973 fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
974 where
975 V: Visitor<'de>,
976 {
977 self.deserialize_map(visitor)
978 }
979
980 fn deserialize_seq<V>(mut self, visitor: V) -> Result<V::Value, Self::Error>
981 where
982 V: Visitor<'de>,
983 {
984 self.delegate.next_value_seed(KeyValueSeqDeserialize {
985 delegate: visitor,
986 first: Some(self.key_value),
987 })
988 }
989
990 fn deserialize_tuple<V>(mut self, len: usize, visitor: V) -> Result<V::Value, Self::Error>
991 where
992 V: Visitor<'de>,
993 {
994 self.delegate.next_value_seed(KeyValueTupleDeserialize {
995 delegate: visitor,
996 len,
997 first: Some(self.key_value),
998 })
999 }
1000
1001 fn deserialize_tuple_struct<V>(
1002 mut self,
1003 name: &'static str,
1004 len: usize,
1005 visitor: V,
1006 ) -> Result<V::Value, Self::Error>
1007 where
1008 V: Visitor<'de>,
1009 {
1010 self.delegate
1011 .next_value_seed(KeyValueTupleStructDeserialize {
1012 delegate: visitor,
1013 name,
1014 len,
1015 first: Some(self.key_value),
1016 })
1017 }
1018
1019 fn deserialize_map<V>(mut self, visitor: V) -> Result<V::Value, Self::Error>
1020 where
1021 V: Visitor<'de>,
1022 {
1023 self.delegate.next_value_seed(KeyValueMapDeserialize {
1024 delegate: visitor,
1025 first: Some(self.key_value),
1026 })
1027 }
1028
1029 fn deserialize_struct<V>(
1030 mut self,
1031 name: &'static str,
1032 fields: &'static [&'static str],
1033 visitor: V,
1034 ) -> Result<V::Value, Self::Error>
1035 where
1036 V: Visitor<'de>,
1037 {
1038 self.delegate.next_value_seed(KeyValueStructDeserialize {
1039 delegate: visitor,
1040 name,
1041 fields,
1042 first: Some(self.key_value),
1043 })
1044 }
1045
1046 fn is_human_readable(&self) -> bool {
1047 self.is_human_readable
1048 }
1049
1050 forward_to_deserialize_any! {
1051 bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
1052 bytes byte_buf option unit unit_struct newtype_struct
1053 enum identifier ignored_any
1054 }
1055}
1056
1057struct KeyValueSeqDeserialize<'de, V> {
1058 delegate: V,
1059 first: Option<DeContent<'de>>,
1060}
1061
1062impl<'de, V> DeserializeSeed<'de> for KeyValueSeqDeserialize<'de, V>
1063where
1064 V: Visitor<'de>,
1065{
1066 type Value = V::Value;
1067
1068 fn deserialize<D>(mut self, deserializer: D) -> Result<Self::Value, D::Error>
1069 where
1070 D: Deserializer<'de>,
1071 {
1072 let is_human_readable = deserializer.is_human_readable();
1073 deserializer.deserialize_seq(VisitorWrapper {
1074 delegate: self.delegate,
1075 is_human_readable,
1076 first: self.first.take(),
1077 })
1078 }
1079}
1080
1081struct KeyValueTupleDeserialize<'de, V> {
1082 delegate: V,
1083 len: usize,
1084 first: Option<DeContent<'de>>,
1085}
1086
1087impl<'de, V> DeserializeSeed<'de> for KeyValueTupleDeserialize<'de, V>
1088where
1089 V: Visitor<'de>,
1090{
1091 type Value = V::Value;
1092
1093 fn deserialize<D>(mut self, deserializer: D) -> Result<Self::Value, D::Error>
1094 where
1095 D: Deserializer<'de>,
1096 {
1097 let is_human_readable = deserializer.is_human_readable();
1098 deserializer.deserialize_tuple(
1099 self.len,
1100 VisitorWrapper {
1101 delegate: self.delegate,
1102 is_human_readable,
1103 first: self.first.take(),
1104 },
1105 )
1106 }
1107}
1108
1109struct KeyValueTupleStructDeserialize<'de, V> {
1110 delegate: V,
1111 name: &'static str,
1112 len: usize,
1113 first: Option<DeContent<'de>>,
1114}
1115
1116impl<'de, V> DeserializeSeed<'de> for KeyValueTupleStructDeserialize<'de, V>
1117where
1118 V: Visitor<'de>,
1119{
1120 type Value = V::Value;
1121
1122 fn deserialize<D>(mut self, deserializer: D) -> Result<Self::Value, D::Error>
1123 where
1124 D: Deserializer<'de>,
1125 {
1126 let is_human_readable = deserializer.is_human_readable();
1127 deserializer.deserialize_tuple_struct(
1128 self.name,
1129 self.len,
1130 VisitorWrapper {
1131 delegate: self.delegate,
1132 is_human_readable,
1133 first: self.first.take(),
1134 },
1135 )
1136 }
1137}
1138
1139struct KeyValueMapDeserialize<'de, V> {
1140 delegate: V,
1141 first: Option<DeContent<'de>>,
1142}
1143
1144impl<'de, V> DeserializeSeed<'de> for KeyValueMapDeserialize<'de, V>
1145where
1146 V: Visitor<'de>,
1147{
1148 type Value = V::Value;
1149
1150 fn deserialize<D>(mut self, deserializer: D) -> Result<Self::Value, D::Error>
1151 where
1152 D: Deserializer<'de>,
1153 {
1154 let is_human_readable = deserializer.is_human_readable();
1155 deserializer.deserialize_map(VisitorWrapper {
1156 delegate: self.delegate,
1157 is_human_readable,
1158 first: self.first.take(),
1159 })
1160 }
1161}
1162
1163struct KeyValueStructDeserialize<'de, V> {
1164 delegate: V,
1165 name: &'static str,
1166 fields: &'static [&'static str],
1167 first: Option<DeContent<'de>>,
1168}
1169
1170impl<'de, V> DeserializeSeed<'de> for KeyValueStructDeserialize<'de, V>
1171where
1172 V: Visitor<'de>,
1173{
1174 type Value = V::Value;
1175
1176 fn deserialize<D>(mut self, deserializer: D) -> Result<Self::Value, D::Error>
1177 where
1178 D: Deserializer<'de>,
1179 {
1180 let is_human_readable = deserializer.is_human_readable();
1181 deserializer.deserialize_struct(
1182 self.name,
1183 self.fields,
1184 VisitorWrapper {
1185 delegate: self.delegate,
1186 is_human_readable,
1187 first: self.first.take(),
1188 },
1189 )
1190 }
1191}
1192
1193struct VisitorWrapper<'de, V> {
1194 delegate: V,
1195 is_human_readable: bool,
1196 first: Option<DeContent<'de>>,
1197}
1198
1199impl<'de, V> Visitor<'de> for VisitorWrapper<'de, V>
1200where
1201 V: Visitor<'de>,
1202{
1203 type Value = V::Value;
1204
1205 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
1206 self.delegate.expecting(formatter)
1207 }
1208
1209 fn visit_seq<A>(self, seq: A) -> Result<Self::Value, A::Error>
1210 where
1211 A: SeqAccess<'de>,
1212 {
1213 self.delegate.visit_seq(SeqAccessWrapper {
1214 delegate: seq,
1215 is_human_readable: self.is_human_readable,
1216 first: self.first,
1217 })
1218 }
1219
1220 fn visit_map<A>(self, map: A) -> Result<Self::Value, A::Error>
1221 where
1222 A: MapAccess<'de>,
1223 {
1224 self.delegate.visit_map(MapAccessWrapper {
1225 delegate: map,
1226 is_human_readable: self.is_human_readable,
1227 first: self.first,
1228 })
1229 }
1230}
1231
1232struct MapAccessWrapper<'de, M> {
1233 delegate: M,
1234 is_human_readable: bool,
1235 first: Option<DeContent<'de>>,
1236}
1237
1238impl<'de, M> MapAccess<'de> for MapAccessWrapper<'de, M>
1239where
1240 M: MapAccess<'de>,
1241{
1242 type Error = M::Error;
1243
1244 fn next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>, Self::Error>
1245 where
1246 K: DeserializeSeed<'de>,
1247 {
1248 if self.first.is_some() {
1249 seed.deserialize(serde_core::de::value::StringDeserializer::new(
1250 MAP_KEY_IDENTIFIER.to_string(),
1251 ))
1252 .map(Some)
1253 } else {
1254 self.delegate.next_key_seed(seed)
1255 }
1256 }
1257
1258 fn next_value_seed<V>(&mut self, seed: V) -> Result<V::Value, Self::Error>
1259 where
1260 V: DeserializeSeed<'de>,
1261 {
1262 if let Some(first) = self.first.take() {
1263 seed.deserialize(ContentDeserializer::new(first, self.is_human_readable))
1264 } else {
1265 self.delegate.next_value_seed(seed)
1266 }
1267 }
1268}
1269
1270struct SeqAccessWrapper<'de, M> {
1271 delegate: M,
1272 is_human_readable: bool,
1273 first: Option<DeContent<'de>>,
1274}
1275
1276impl<'de, S> SeqAccess<'de> for SeqAccessWrapper<'de, S>
1277where
1278 S: SeqAccess<'de>,
1279{
1280 type Error = S::Error;
1281
1282 fn next_element_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>, Self::Error>
1283 where
1284 K: DeserializeSeed<'de>,
1285 {
1286 if let Some(first) = self.first.take() {
1287 seed.deserialize(ContentDeserializer::new(first, self.is_human_readable))
1288 .map(Some)
1289 } else {
1290 self.delegate.next_element_seed(seed)
1291 }
1292 }
1293}