@@ -31,54 +31,59 @@ where
3131 }
3232}
3333
34- #[ derive( Debug ) ]
35- pub struct LinkedHashMapVisitor < K , V > {
36- marker : PhantomData < LinkedHashMap < K , V > > ,
37- }
38-
39- impl < K , V > LinkedHashMapVisitor < K , V > {
40- fn new ( ) -> Self {
41- LinkedHashMapVisitor {
42- marker : PhantomData ,
43- }
44- }
45- }
46-
47- impl < K , V > Default for LinkedHashMapVisitor < K , V > {
48- fn default ( ) -> Self {
49- Self :: new ( )
50- }
51- }
52-
53- impl < ' de , K , V > Visitor < ' de > for LinkedHashMapVisitor < K , V >
34+ impl < ' de , K , V , S > Deserialize < ' de > for LinkedHashMap < K , V , S >
5435where
5536 K : Deserialize < ' de > + Eq + Hash ,
5637 V : Deserialize < ' de > ,
38+ S : BuildHasher + Default ,
5739{
58- type Value = LinkedHashMap < K , V > ;
59-
60- fn expecting ( & self , formatter : & mut Formatter ) -> fmt :: Result {
61- write ! ( formatter , "a map" )
62- }
40+ fn deserialize < D : Deserializer < ' de > > ( deserializer : D ) -> Result < Self , D :: Error > {
41+ # [ derive ( Debug ) ]
42+ pub struct LinkedHashMapVisitor < K , V , S > {
43+ marker : PhantomData < LinkedHashMap < K , V , S > > ,
44+ }
6345
64- #[ inline]
65- fn visit_map < M : MapAccess < ' de > > ( self , mut map : M ) -> Result < Self :: Value , M :: Error > {
66- let mut values = LinkedHashMap :: with_capacity ( map. size_hint ( ) . unwrap_or ( 0 ) ) ;
46+ impl < K , V , S > LinkedHashMapVisitor < K , V , S > {
47+ fn new ( ) -> Self {
48+ LinkedHashMapVisitor {
49+ marker : PhantomData ,
50+ }
51+ }
52+ }
6753
68- while let Some ( ( k, v) ) = map. next_entry ( ) ? {
69- values. insert ( k, v) ;
54+ impl < K , V , S > Default for LinkedHashMapVisitor < K , V , S > {
55+ fn default ( ) -> Self {
56+ Self :: new ( )
57+ }
7058 }
7159
72- Ok ( values)
73- }
74- }
60+ impl < ' de , K , V , S > Visitor < ' de > for LinkedHashMapVisitor < K , V , S >
61+ where
62+ K : Deserialize < ' de > + Eq + Hash ,
63+ V : Deserialize < ' de > ,
64+ S : BuildHasher + Default ,
65+ {
66+ type Value = LinkedHashMap < K , V , S > ;
67+
68+ fn expecting ( & self , formatter : & mut Formatter ) -> fmt:: Result {
69+ write ! ( formatter, "a map" )
70+ }
71+
72+ #[ inline]
73+ fn visit_map < M : MapAccess < ' de > > ( self , mut map : M ) -> Result < Self :: Value , M :: Error > {
74+ let mut values = LinkedHashMap :: with_capacity_and_hasher (
75+ map. size_hint ( ) . unwrap_or ( 0 ) ,
76+ S :: default ( ) ,
77+ ) ;
78+
79+ while let Some ( ( k, v) ) = map. next_entry ( ) ? {
80+ values. insert ( k, v) ;
81+ }
82+
83+ Ok ( values)
84+ }
85+ }
7586
76- impl < ' de , K , V > Deserialize < ' de > for LinkedHashMap < K , V >
77- where
78- K : Deserialize < ' de > + Eq + Hash ,
79- V : Deserialize < ' de > ,
80- {
81- fn deserialize < D : Deserializer < ' de > > ( deserializer : D ) -> Result < Self , D :: Error > {
8287 deserializer. deserialize_map ( LinkedHashMapVisitor :: default ( ) )
8388 }
8489}
0 commit comments