@@ -11,6 +11,7 @@ mod size_hint {
11
11
}
12
12
13
13
mod map {
14
+ use crate :: raw:: Allocator ;
14
15
use core:: fmt;
15
16
use core:: hash:: { BuildHasher , Hash } ;
16
17
use core:: marker:: PhantomData ;
@@ -26,7 +27,7 @@ mod map {
26
27
K : Serialize + Eq + Hash ,
27
28
V : Serialize ,
28
29
H : BuildHasher ,
29
- A : crate :: raw :: Allocator + Clone ,
30
+ A : Allocator + Clone ,
30
31
{
31
32
#[ cfg_attr( feature = "inline-more" , inline) ]
32
33
fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
@@ -37,40 +38,46 @@ mod map {
37
38
}
38
39
}
39
40
40
- impl < ' de , K , V , S > Deserialize < ' de > for HashMap < K , V , S >
41
+ impl < ' de , K , V , S , A > Deserialize < ' de > for HashMap < K , V , S , A >
41
42
where
42
43
K : Deserialize < ' de > + Eq + Hash ,
43
44
V : Deserialize < ' de > ,
44
45
S : BuildHasher + Default ,
46
+ A : Allocator + Clone + Default ,
45
47
{
46
48
fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
47
49
where
48
50
D : Deserializer < ' de > ,
49
51
{
50
- struct MapVisitor < K , V , S > {
51
- marker : PhantomData < HashMap < K , V , S > > ,
52
+ struct MapVisitor < K , V , S , A >
53
+ where
54
+ A : Allocator + Clone ,
55
+ {
56
+ marker : PhantomData < HashMap < K , V , S , A > > ,
52
57
}
53
58
54
- impl < ' de , K , V , S > Visitor < ' de > for MapVisitor < K , V , S >
59
+ impl < ' de , K , V , S , A > Visitor < ' de > for MapVisitor < K , V , S , A >
55
60
where
56
61
K : Deserialize < ' de > + Eq + Hash ,
57
62
V : Deserialize < ' de > ,
58
63
S : BuildHasher + Default ,
64
+ A : Allocator + Clone + Default ,
59
65
{
60
- type Value = HashMap < K , V , S > ;
66
+ type Value = HashMap < K , V , S , A > ;
61
67
62
68
fn expecting ( & self , formatter : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
63
69
formatter. write_str ( "a map" )
64
70
}
65
71
66
72
#[ cfg_attr( feature = "inline-more" , inline) ]
67
- fn visit_map < A > ( self , mut map : A ) -> Result < Self :: Value , A :: Error >
73
+ fn visit_map < M > ( self , mut map : M ) -> Result < Self :: Value , M :: Error >
68
74
where
69
- A : MapAccess < ' de > ,
75
+ M : MapAccess < ' de > ,
70
76
{
71
- let mut values = HashMap :: with_capacity_and_hasher (
77
+ let mut values = HashMap :: with_capacity_and_hasher_in (
72
78
size_hint:: cautious ( map. size_hint ( ) ) ,
73
79
S :: default ( ) ,
80
+ A :: default ( ) ,
74
81
) ;
75
82
76
83
while let Some ( ( key, value) ) = map. next_entry ( ) ? {
@@ -90,6 +97,7 @@ mod map {
90
97
}
91
98
92
99
mod set {
100
+ use crate :: raw:: Allocator ;
93
101
use core:: fmt;
94
102
use core:: hash:: { BuildHasher , Hash } ;
95
103
use core:: marker:: PhantomData ;
@@ -100,10 +108,11 @@ mod set {
100
108
101
109
use super :: size_hint;
102
110
103
- impl < T , H > Serialize for HashSet < T , H >
111
+ impl < T , H , A > Serialize for HashSet < T , H , A >
104
112
where
105
113
T : Serialize + Eq + Hash ,
106
114
H : BuildHasher ,
115
+ A : Allocator + Clone ,
107
116
{
108
117
#[ cfg_attr( feature = "inline-more" , inline) ]
109
118
fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
@@ -114,38 +123,44 @@ mod set {
114
123
}
115
124
}
116
125
117
- impl < ' de , T , S > Deserialize < ' de > for HashSet < T , S >
126
+ impl < ' de , T , S , A > Deserialize < ' de > for HashSet < T , S , A >
118
127
where
119
128
T : Deserialize < ' de > + Eq + Hash ,
120
129
S : BuildHasher + Default ,
130
+ A : Allocator + Clone + Default ,
121
131
{
122
132
fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
123
133
where
124
134
D : Deserializer < ' de > ,
125
135
{
126
- struct SeqVisitor < T , S > {
127
- marker : PhantomData < HashSet < T , S > > ,
136
+ struct SeqVisitor < T , S , A >
137
+ where
138
+ A : Allocator + Clone ,
139
+ {
140
+ marker : PhantomData < HashSet < T , S , A > > ,
128
141
}
129
142
130
- impl < ' de , T , S > Visitor < ' de > for SeqVisitor < T , S >
143
+ impl < ' de , T , S , A > Visitor < ' de > for SeqVisitor < T , S , A >
131
144
where
132
145
T : Deserialize < ' de > + Eq + Hash ,
133
146
S : BuildHasher + Default ,
147
+ A : Allocator + Clone + Default ,
134
148
{
135
- type Value = HashSet < T , S > ;
149
+ type Value = HashSet < T , S , A > ;
136
150
137
151
fn expecting ( & self , formatter : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
138
152
formatter. write_str ( "a sequence" )
139
153
}
140
154
141
155
#[ cfg_attr( feature = "inline-more" , inline) ]
142
- fn visit_seq < A > ( self , mut seq : A ) -> Result < Self :: Value , A :: Error >
156
+ fn visit_seq < M > ( self , mut seq : M ) -> Result < Self :: Value , M :: Error >
143
157
where
144
- A : SeqAccess < ' de > ,
158
+ M : SeqAccess < ' de > ,
145
159
{
146
- let mut values = HashSet :: with_capacity_and_hasher (
160
+ let mut values = HashSet :: with_capacity_and_hasher_in (
147
161
size_hint:: cautious ( seq. size_hint ( ) ) ,
148
162
S :: default ( ) ,
163
+ A :: default ( ) ,
149
164
) ;
150
165
151
166
while let Some ( value) = seq. next_element ( ) ? {
@@ -167,12 +182,15 @@ mod set {
167
182
where
168
183
D : Deserializer < ' de > ,
169
184
{
170
- struct SeqInPlaceVisitor < ' a , T , S > ( & ' a mut HashSet < T , S > ) ;
185
+ struct SeqInPlaceVisitor < ' a , T , S , A > ( & ' a mut HashSet < T , S , A > )
186
+ where
187
+ A : Allocator + Clone ;
171
188
172
- impl < ' a , ' de , T , S > Visitor < ' de > for SeqInPlaceVisitor < ' a , T , S >
189
+ impl < ' a , ' de , T , S , A > Visitor < ' de > for SeqInPlaceVisitor < ' a , T , S , A >
173
190
where
174
191
T : Deserialize < ' de > + Eq + Hash ,
175
192
S : BuildHasher + Default ,
193
+ A : Allocator + Clone ,
176
194
{
177
195
type Value = ( ) ;
178
196
@@ -181,9 +199,9 @@ mod set {
181
199
}
182
200
183
201
#[ cfg_attr( feature = "inline-more" , inline) ]
184
- fn visit_seq < A > ( self , mut seq : A ) -> Result < Self :: Value , A :: Error >
202
+ fn visit_seq < M > ( self , mut seq : M ) -> Result < Self :: Value , M :: Error >
185
203
where
186
- A : SeqAccess < ' de > ,
204
+ M : SeqAccess < ' de > ,
187
205
{
188
206
self . 0 . clear ( ) ;
189
207
self . 0 . reserve ( size_hint:: cautious ( seq. size_hint ( ) ) ) ;
0 commit comments