@@ -30,6 +30,7 @@ const SERDE_TAG_KEY_CANARY: &str = "serde::__private::de::content::TagOrContent"
30
30
///
31
31
/// If you just want to simply deserialize a value,
32
32
/// you can use the [`from_str`] convenience function.
33
+ #[ derive( Copy , Clone ) ]
33
34
pub struct Deserializer < ' de > {
34
35
pub ( crate ) parser : Parser < ' de > ,
35
36
newtype_variant : bool ,
@@ -773,6 +774,269 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
773
774
}
774
775
}
775
776
777
+ impl < ' de > serde:: de:: Buffer < ' de > for OwnedDeserializer < ' de > {
778
+ type Error = Error ;
779
+
780
+ type OwnedDeserializer = Self ;
781
+
782
+ type RefDeserializer < ' b > = Self where ' de : ' b ;
783
+
784
+ fn owned_deserializer ( self ) -> Self :: OwnedDeserializer {
785
+ self
786
+ }
787
+
788
+ fn ref_deserializer < ' b > ( & ' b self ) -> Self :: RefDeserializer < ' b >
789
+ where
790
+ ' de : ' b ,
791
+ {
792
+ * self
793
+ }
794
+ }
795
+
796
+ #[ derive( Copy , Clone ) ]
797
+ struct OwnedDeserializer < ' de > {
798
+ de : Deserializer < ' de >
799
+ }
800
+
801
+ impl < ' de > serde:: de:: Deserializer < ' de > for OwnedDeserializer < ' de > {
802
+ type Error = Error ;
803
+
804
+ fn deserialize_any < V > ( mut self , visitor : V ) -> Result < V :: Value >
805
+ where
806
+ V : Visitor < ' de > ,
807
+ {
808
+ self . de . deserialize_any ( visitor)
809
+ }
810
+
811
+ fn deserialize_bool < V > ( mut self , visitor : V ) -> Result < V :: Value >
812
+ where
813
+ V : Visitor < ' de > ,
814
+ {
815
+ self . de . deserialize_bool ( visitor)
816
+ }
817
+
818
+ fn deserialize_i8 < V > ( mut self , visitor : V ) -> Result < V :: Value >
819
+ where
820
+ V : Visitor < ' de > ,
821
+ {
822
+ self . de . deserialize_i8 ( visitor)
823
+ }
824
+
825
+ fn deserialize_i16 < V > ( mut self , visitor : V ) -> Result < V :: Value >
826
+ where
827
+ V : Visitor < ' de > ,
828
+ {
829
+ self . de . deserialize_i16 ( visitor)
830
+ }
831
+
832
+ fn deserialize_i32 < V > ( mut self , visitor : V ) -> Result < V :: Value >
833
+ where
834
+ V : Visitor < ' de > ,
835
+ {
836
+ self . de . deserialize_i32 ( visitor)
837
+ }
838
+
839
+ fn deserialize_i64 < V > ( mut self , visitor : V ) -> Result < V :: Value >
840
+ where
841
+ V : Visitor < ' de > ,
842
+ {
843
+ self . de . deserialize_i64 ( visitor)
844
+ }
845
+
846
+ #[ cfg( feature = "integer128" ) ]
847
+ fn deserialize_i128 < V > ( mut self , visitor : V ) -> Result < V :: Value >
848
+ where
849
+ V : Visitor < ' de > ,
850
+ {
851
+ self . de . deserialize_i128 ( Visitor )
852
+ }
853
+
854
+ fn deserialize_u8 < V > ( mut self , visitor : V ) -> Result < V :: Value >
855
+ where
856
+ V : Visitor < ' de > ,
857
+ {
858
+ self . de . deserialize_u8 ( visitor)
859
+ }
860
+
861
+ fn deserialize_u16 < V > ( mut self , visitor : V ) -> Result < V :: Value >
862
+ where
863
+ V : Visitor < ' de > ,
864
+ {
865
+ self . de . deserialize_u16 ( visitor)
866
+ }
867
+
868
+ fn deserialize_u32 < V > ( mut self , visitor : V ) -> Result < V :: Value >
869
+ where
870
+ V : Visitor < ' de > ,
871
+ {
872
+ self . de . deserialize_u32 ( visitor)
873
+ }
874
+
875
+ fn deserialize_u64 < V > ( mut self , visitor : V ) -> Result < V :: Value >
876
+ where
877
+ V : Visitor < ' de > ,
878
+ {
879
+ self . de . deserialize_u64 ( visitor)
880
+ }
881
+
882
+ #[ cfg( feature = "integer128" ) ]
883
+ fn deserialize_u128 < V > ( mut self , visitor : V ) -> Result < V :: Value >
884
+ where
885
+ V : Visitor < ' de > ,
886
+ {
887
+ self . de . deserialize_u128 ( visitor)
888
+ }
889
+
890
+ fn deserialize_f32 < V > ( mut self , visitor : V ) -> Result < V :: Value >
891
+ where
892
+ V : Visitor < ' de > ,
893
+ {
894
+ self . de . deserialize_f32 ( visitor)
895
+ }
896
+
897
+ fn deserialize_f64 < V > ( mut self , visitor : V ) -> Result < V :: Value >
898
+ where
899
+ V : Visitor < ' de > ,
900
+ {
901
+ self . de . deserialize_f64 ( visitor)
902
+ }
903
+
904
+ fn deserialize_char < V > ( mut self , visitor : V ) -> Result < V :: Value >
905
+ where
906
+ V : Visitor < ' de > ,
907
+ {
908
+ self . de . deserialize_char ( visitor)
909
+ }
910
+
911
+ fn deserialize_str < V > ( mut self , visitor : V ) -> Result < V :: Value >
912
+ where
913
+ V : Visitor < ' de > ,
914
+ {
915
+ self . de . deserialize_str ( visitor)
916
+ }
917
+
918
+ fn deserialize_string < V > ( mut self , visitor : V ) -> Result < V :: Value >
919
+ where
920
+ V : Visitor < ' de > ,
921
+ {
922
+ self . de . deserialize_string ( visitor)
923
+ }
924
+
925
+ fn deserialize_bytes < V > ( mut self , visitor : V ) -> Result < V :: Value >
926
+ where
927
+ V : Visitor < ' de > ,
928
+ {
929
+ self . de . deserialize_bytes ( visitor)
930
+ }
931
+
932
+ fn deserialize_byte_buf < V > ( mut self , visitor : V ) -> Result < V :: Value >
933
+ where
934
+ V : Visitor < ' de > ,
935
+ {
936
+ self . de . deserialize_byte_buf ( visitor)
937
+ }
938
+
939
+ fn deserialize_option < V > ( mut self , visitor : V ) -> Result < V :: Value >
940
+ where
941
+ V : Visitor < ' de > ,
942
+ {
943
+ self . de . deserialize_option ( visitor)
944
+ }
945
+
946
+ // In Serde, unit means an anonymous value containing no data.
947
+ fn deserialize_unit < V > ( mut self , visitor : V ) -> Result < V :: Value >
948
+ where
949
+ V : Visitor < ' de > ,
950
+ {
951
+ self . de . deserialize_unit ( visitor)
952
+ }
953
+
954
+ fn deserialize_unit_struct < V > ( mut self , name : & ' static str , visitor : V ) -> Result < V :: Value >
955
+ where
956
+ V : Visitor < ' de > ,
957
+ {
958
+ self . de . deserialize_unit_struct ( name, visitor)
959
+ }
960
+
961
+ fn deserialize_newtype_struct < V > ( mut self , name : & ' static str , visitor : V ) -> Result < V :: Value >
962
+ where
963
+ V : Visitor < ' de > ,
964
+ {
965
+ self . de . deserialize_unit_struct ( name, visitor)
966
+ }
967
+
968
+ fn deserialize_seq < V > ( mut self , visitor : V ) -> Result < V :: Value >
969
+ where
970
+ V : Visitor < ' de > ,
971
+ {
972
+ self . de . deserialize_seq ( visitor)
973
+ }
974
+
975
+ fn deserialize_tuple < V > ( mut self , len : usize , visitor : V ) -> Result < V :: Value >
976
+ where
977
+ V : Visitor < ' de > ,
978
+ {
979
+ self . de . deserialize_tuple ( len, visitor)
980
+ }
981
+
982
+ fn deserialize_tuple_struct < V > (
983
+ mut self ,
984
+ name : & ' static str ,
985
+ len : usize ,
986
+ visitor : V ,
987
+ ) -> Result < V :: Value >
988
+ where
989
+ V : Visitor < ' de > ,
990
+ {
991
+ self . de . deserialize_tuple_struct ( name, len, visitor)
992
+ }
993
+
994
+ fn deserialize_map < V > ( mut self , visitor : V ) -> Result < V :: Value >
995
+ where
996
+ V : Visitor < ' de > ,
997
+ {
998
+ self . de . deserialize_map ( visitor)
999
+ }
1000
+
1001
+ fn deserialize_struct < V > (
1002
+ mut self ,
1003
+ name : & ' static str ,
1004
+ fields : & ' static [ & ' static str ] ,
1005
+ visitor : V ,
1006
+ ) -> Result < V :: Value >
1007
+ where
1008
+ V : Visitor < ' de > ,
1009
+ {
1010
+ self . de . deserialize_struct ( name, fields, visitor)
1011
+ }
1012
+
1013
+ fn deserialize_enum < V > (
1014
+ mut self ,
1015
+ name : & ' static str ,
1016
+ variants : & ' static [ & ' static str ] ,
1017
+ visitor : V ,
1018
+ ) -> Result < V :: Value >
1019
+ where
1020
+ V : Visitor < ' de > ,
1021
+ {
1022
+ self . de . deserialize_enum ( name, variants, visitor)
1023
+ }
1024
+
1025
+ fn deserialize_identifier < V > ( mut self , visitor : V ) -> Result < V :: Value >
1026
+ where
1027
+ V : Visitor < ' de > ,
1028
+ {
1029
+ self . de . deserialize_identifier ( visitor)
1030
+ }
1031
+
1032
+ fn deserialize_ignored_any < V > ( mut self , visitor : V ) -> Result < V :: Value >
1033
+ where
1034
+ V : Visitor < ' de > ,
1035
+ {
1036
+ self . de . deserialize_ignored_any ( visitor)
1037
+ }
1038
+ }
1039
+
776
1040
enum Terminator {
777
1041
Map ,
778
1042
MapAsStruct ,
@@ -897,6 +1161,14 @@ impl<'de, 'a> de::MapAccess<'de> for CommaSeparated<'a, 'de> {
897
1161
Err ( Error :: ExpectedMapColon )
898
1162
}
899
1163
}
1164
+
1165
+ fn next_value_buffer (
1166
+ & mut self ,
1167
+ ) -> Result < impl serde:: de:: Buffer < ' de , Error = Self :: Error > + use < ' de , ' a > , Self :: Error > {
1168
+ Ok ( OwnedDeserializer {
1169
+ de : Deserializer { parser : self . de . parser . clone ( ) , newtype_variant : self . de . newtype_variant , serde_content_newtype : self . de . serde_content_newtype , last_identifier : self . de . last_identifier , recursion_limit : self . de . recursion_limit }
1170
+ } )
1171
+ }
900
1172
}
901
1173
902
1174
struct Enum < ' a , ' de : ' a > {
0 commit comments