@@ -19,6 +19,9 @@ enum SerKey {
19
19
Seq ( usize ) ,
20
20
}
21
21
22
+ /// An uninhabited type: no values like this can ever exist!
23
+ pub enum Unreachable { }
24
+
22
25
/// Serializer for numbered sequences
23
26
///
24
27
/// This wrapper is present when we are outputting a sequence (numbered indices).
@@ -427,13 +430,13 @@ macro_rules! string_serialize_via_display { { $method:ident, $type:ty } => {
427
430
impl ser:: Serializer for StringKeySerializer {
428
431
type Ok = String ;
429
432
type Error = ConfigError ;
430
- type SerializeSeq = Self ;
431
- type SerializeTuple = Self ;
432
- type SerializeTupleStruct = Self ;
433
- type SerializeTupleVariant = Self ;
434
- type SerializeMap = Self ;
435
- type SerializeStruct = Self ;
436
- type SerializeStructVariant = Self ;
433
+ type SerializeSeq = Unreachable ;
434
+ type SerializeTuple = Unreachable ;
435
+ type SerializeTupleStruct = Unreachable ;
436
+ type SerializeTupleVariant = Unreachable ;
437
+ type SerializeMap = Unreachable ;
438
+ type SerializeStruct = Unreachable ;
439
+ type SerializeStructVariant = Unreachable ;
437
440
438
441
string_serialize_via_display ! ( serialize_bool, bool ) ;
439
442
string_serialize_via_display ! ( serialize_i8, i8 ) ;
@@ -560,122 +563,122 @@ impl ser::Serializer for StringKeySerializer {
560
563
}
561
564
}
562
565
563
- impl ser:: SerializeSeq for StringKeySerializer {
566
+ impl ser:: SerializeSeq for Unreachable {
564
567
type Ok = String ;
565
568
type Error = ConfigError ;
566
569
567
570
fn serialize_element < T > ( & mut self , _value : & T ) -> Result < ( ) >
568
571
where
569
572
T : ?Sized + ser:: Serialize ,
570
573
{
571
- unreachable ! ( )
574
+ match * self { }
572
575
}
573
576
574
577
fn end ( self ) -> Result < Self :: Ok > {
575
- unreachable ! ( )
578
+ match self { }
576
579
}
577
580
}
578
581
579
- impl ser:: SerializeTuple for StringKeySerializer {
582
+ impl ser:: SerializeTuple for Unreachable {
580
583
type Ok = String ;
581
584
type Error = ConfigError ;
582
585
583
586
fn serialize_element < T > ( & mut self , _value : & T ) -> Result < ( ) >
584
587
where
585
588
T : ?Sized + ser:: Serialize ,
586
589
{
587
- unreachable ! ( )
590
+ match * self { }
588
591
}
589
592
590
593
fn end ( self ) -> Result < Self :: Ok > {
591
- unreachable ! ( )
594
+ match self { }
592
595
}
593
596
}
594
597
595
- impl ser:: SerializeTupleStruct for StringKeySerializer {
598
+ impl ser:: SerializeTupleStruct for Unreachable {
596
599
type Ok = String ;
597
600
type Error = ConfigError ;
598
601
599
602
fn serialize_field < T > ( & mut self , _value : & T ) -> Result < ( ) >
600
603
where
601
604
T : ?Sized + ser:: Serialize ,
602
605
{
603
- unreachable ! ( )
606
+ match * self { }
604
607
}
605
608
606
609
fn end ( self ) -> Result < Self :: Ok > {
607
- unreachable ! ( )
610
+ match self { }
608
611
}
609
612
}
610
613
611
- impl ser:: SerializeTupleVariant for StringKeySerializer {
614
+ impl ser:: SerializeTupleVariant for Unreachable {
612
615
type Ok = String ;
613
616
type Error = ConfigError ;
614
617
615
618
fn serialize_field < T > ( & mut self , _value : & T ) -> Result < ( ) >
616
619
where
617
620
T : ?Sized + ser:: Serialize ,
618
621
{
619
- unreachable ! ( )
622
+ match * self { }
620
623
}
621
624
622
625
fn end ( self ) -> Result < Self :: Ok > {
623
- unreachable ! ( )
626
+ match self { }
624
627
}
625
628
}
626
629
627
- impl ser:: SerializeMap for StringKeySerializer {
630
+ impl ser:: SerializeMap for Unreachable {
628
631
type Ok = String ;
629
632
type Error = ConfigError ;
630
633
631
634
fn serialize_key < T > ( & mut self , _key : & T ) -> Result < ( ) >
632
635
where
633
636
T : ?Sized + ser:: Serialize ,
634
637
{
635
- unreachable ! ( )
638
+ match * self { }
636
639
}
637
640
638
641
fn serialize_value < T > ( & mut self , _value : & T ) -> Result < ( ) >
639
642
where
640
643
T : ?Sized + ser:: Serialize ,
641
644
{
642
- unreachable ! ( )
645
+ match * self { }
643
646
}
644
647
645
648
fn end ( self ) -> Result < Self :: Ok > {
646
- unreachable ! ( )
649
+ match self { }
647
650
}
648
651
}
649
652
650
- impl ser:: SerializeStruct for StringKeySerializer {
653
+ impl ser:: SerializeStruct for Unreachable {
651
654
type Ok = String ;
652
655
type Error = ConfigError ;
653
656
654
657
fn serialize_field < T > ( & mut self , _key : & ' static str , _value : & T ) -> Result < ( ) >
655
658
where
656
659
T : ?Sized + ser:: Serialize ,
657
660
{
658
- unreachable ! ( )
661
+ match * self { }
659
662
}
660
663
661
664
fn end ( self ) -> Result < Self :: Ok > {
662
- unreachable ! ( )
665
+ match self { }
663
666
}
664
667
}
665
668
666
- impl ser:: SerializeStructVariant for StringKeySerializer {
669
+ impl ser:: SerializeStructVariant for Unreachable {
667
670
type Ok = String ;
668
671
type Error = ConfigError ;
669
672
670
673
fn serialize_field < T > ( & mut self , _key : & ' static str , _value : & T ) -> Result < ( ) >
671
674
where
672
675
T : ?Sized + ser:: Serialize ,
673
676
{
674
- unreachable ! ( )
677
+ match * self { }
675
678
}
676
679
677
680
fn end ( self ) -> Result < Self :: Ok > {
678
- unreachable ! ( )
681
+ match self { }
679
682
}
680
683
}
681
684
0 commit comments