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