@@ -91,11 +91,11 @@ macro_rules! impl_trivial_serialize {
91
91
92
92
( $ty: ty) => {
93
93
impl Serialize for $ty {
94
- fn serialize<' fut>(
94
+ async fn serialize<' fut>(
95
95
& ' fut self ,
96
96
serializer: & ' fut mut dyn DynSerializer ,
97
- ) -> impl Future < Output = Result <( ) , MerdeError <' static >>> + ' fut {
98
- async { serializer. write( Event :: from( * self ) ) . await }
97
+ ) -> Result <( ) , MerdeError <' static >> {
98
+ serializer. write( Event :: from( * self ) ) . await
99
99
}
100
100
}
101
101
} ;
@@ -115,197 +115,177 @@ impl_trivial_serialize! {
115
115
}
116
116
117
117
impl Serialize for String {
118
- fn serialize < ' se > (
118
+ async fn serialize < ' se > (
119
119
& ' se self ,
120
120
serializer : & ' se mut dyn DynSerializer ,
121
- ) -> impl Future < Output = Result < ( ) , MerdeError < ' static > > > + ' se {
122
- async { serializer. write ( Event :: Str ( CowStr :: Borrowed ( self ) ) ) . await }
121
+ ) -> Result < ( ) , MerdeError < ' static > > {
122
+ serializer. write ( Event :: Str ( CowStr :: Borrowed ( self ) ) ) . await
123
123
}
124
124
}
125
125
126
126
impl < ' s > Serialize for & ' s str {
127
- fn serialize < ' se > (
127
+ async fn serialize < ' se > (
128
128
& ' se self ,
129
129
serializer : & ' se mut dyn DynSerializer ,
130
- ) -> impl Future < Output = Result < ( ) , MerdeError < ' static > > > + ' se {
131
- async { serializer. write ( Event :: Str ( CowStr :: Borrowed ( self ) ) ) . await }
130
+ ) -> Result < ( ) , MerdeError < ' static > > {
131
+ serializer. write ( Event :: Str ( CowStr :: Borrowed ( self ) ) ) . await
132
132
}
133
133
}
134
134
135
135
impl < ' s > Serialize for CowStr < ' s > {
136
- fn serialize < ' se > (
136
+ async fn serialize < ' se > (
137
137
& ' se self ,
138
138
serializer : & ' se mut dyn DynSerializer ,
139
- ) -> impl Future < Output = Result < ( ) , MerdeError < ' static > > > + ' se {
140
- async {
141
- serializer
142
- . write ( Event :: Str ( CowStr :: Borrowed ( self . as_ref ( ) ) ) )
143
- . await
144
- }
139
+ ) -> Result < ( ) , MerdeError < ' static > > {
140
+ serializer
141
+ . write ( Event :: Str ( CowStr :: Borrowed ( self . as_ref ( ) ) ) )
142
+ . await
145
143
}
146
144
}
147
145
148
146
impl < ' s > Serialize for Cow < ' s , str > {
149
- fn serialize < ' se > (
147
+ async fn serialize < ' se > (
150
148
& ' se self ,
151
149
serializer : & ' se mut dyn DynSerializer ,
152
- ) -> impl Future < Output = Result < ( ) , MerdeError < ' static > > > + ' se {
153
- async {
154
- serializer
155
- . write ( Event :: Str ( CowStr :: Borrowed ( self . as_ref ( ) ) ) )
156
- . await
157
- }
150
+ ) -> Result < ( ) , MerdeError < ' static > > {
151
+ serializer
152
+ . write ( Event :: Str ( CowStr :: Borrowed ( self . as_ref ( ) ) ) )
153
+ . await
158
154
}
159
155
}
160
156
161
157
impl < ' s > Serialize for CowBytes < ' s > {
162
- fn serialize < ' se > (
158
+ async fn serialize < ' se > (
163
159
& ' se self ,
164
160
serializer : & ' se mut dyn DynSerializer ,
165
- ) -> impl Future < Output = Result < ( ) , MerdeError < ' static > > > + ' se {
166
- async {
167
- serializer
168
- . write ( Event :: Bytes ( CowBytes :: Borrowed ( self . as_ref ( ) ) ) )
169
- . await
170
- }
161
+ ) -> Result < ( ) , MerdeError < ' static > > {
162
+ serializer
163
+ . write ( Event :: Bytes ( CowBytes :: Borrowed ( self . as_ref ( ) ) ) )
164
+ . await
171
165
}
172
166
}
173
167
174
168
impl < T : Serialize > Serialize for Option < T > {
175
- fn serialize < ' se > (
169
+ async fn serialize < ' se > (
176
170
& ' se self ,
177
171
serializer : & ' se mut dyn DynSerializer ,
178
- ) -> impl Future < Output = Result < ( ) , MerdeError < ' static > > > + ' se {
179
- async move {
180
- match self {
181
- Some ( value) => value. serialize ( serializer) . await ,
182
- None => serializer. write ( Event :: Null ) . await ,
183
- }
172
+ ) -> Result < ( ) , MerdeError < ' static > > {
173
+ match self {
174
+ Some ( value) => value. serialize ( serializer) . await ,
175
+ None => serializer. write ( Event :: Null ) . await ,
184
176
}
185
177
}
186
178
}
187
179
188
180
impl < T : Serialize > Serialize for & [ T ] {
189
- fn serialize < ' se > (
181
+ async fn serialize < ' se > (
190
182
& ' se self ,
191
183
serializer : & ' se mut dyn DynSerializer ,
192
- ) -> impl Future < Output = Result < ( ) , MerdeError < ' static > > > + ' se {
193
- async {
194
- serializer
195
- . write ( Event :: ArrayStart ( ArrayStart {
196
- size_hint : Some ( self . len ( ) ) ,
197
- } ) )
198
- . await ?;
199
- for item in * self {
200
- item. serialize ( serializer) . await ?;
201
- }
202
- serializer. write ( Event :: ArrayEnd ) . await
184
+ ) -> Result < ( ) , MerdeError < ' static > > {
185
+ serializer
186
+ . write ( Event :: ArrayStart ( ArrayStart {
187
+ size_hint : Some ( self . len ( ) ) ,
188
+ } ) )
189
+ . await ?;
190
+ for item in * self {
191
+ item. serialize ( serializer) . await ?;
203
192
}
193
+ serializer. write ( Event :: ArrayEnd ) . await
204
194
}
205
195
}
206
196
207
197
impl < T : Serialize > Serialize for Vec < T > {
208
- fn serialize < ' se > (
198
+ async fn serialize < ' se > (
209
199
& ' se self ,
210
200
serializer : & ' se mut dyn DynSerializer ,
211
- ) -> impl Future < Output = Result < ( ) , MerdeError < ' static > > > + ' se {
212
- async move {
213
- serializer
214
- . write ( Event :: ArrayStart ( ArrayStart {
215
- size_hint : Some ( self . len ( ) ) ,
216
- } ) )
217
- . await ?;
218
- for item in self {
219
- item. serialize ( serializer) . await ?;
220
- }
221
- serializer. write ( Event :: ArrayEnd ) . await
201
+ ) -> Result < ( ) , MerdeError < ' static > > {
202
+ serializer
203
+ . write ( Event :: ArrayStart ( ArrayStart {
204
+ size_hint : Some ( self . len ( ) ) ,
205
+ } ) )
206
+ . await ?;
207
+ for item in self {
208
+ item. serialize ( serializer) . await ?;
222
209
}
210
+ serializer. write ( Event :: ArrayEnd ) . await
223
211
}
224
212
}
225
213
226
214
impl < K : Serialize , V : Serialize , BH : BuildHasher > Serialize for HashMap < K , V , BH > {
227
- fn serialize < ' fut > (
215
+ async fn serialize < ' fut > (
228
216
& ' fut self ,
229
217
serializer : & ' fut mut dyn DynSerializer ,
230
- ) -> impl Future < Output = Result < ( ) , MerdeError < ' static > > > + ' fut {
231
- async move {
232
- serializer
233
- . write ( Event :: MapStart ( MapStart {
234
- size_hint : Some ( self . len ( ) ) ,
235
- } ) )
236
- . await ?;
237
- for ( key, value) in self {
238
- key. serialize ( serializer) . await ?;
239
- value. serialize ( serializer) . await ?;
240
- }
241
- serializer. write ( Event :: MapEnd ) . await
218
+ ) -> Result < ( ) , MerdeError < ' static > > {
219
+ serializer
220
+ . write ( Event :: MapStart ( MapStart {
221
+ size_hint : Some ( self . len ( ) ) ,
222
+ } ) )
223
+ . await ?;
224
+ for ( key, value) in self {
225
+ key. serialize ( serializer) . await ?;
226
+ value. serialize ( serializer) . await ?;
242
227
}
228
+ serializer. write ( Event :: MapEnd ) . await
243
229
}
244
230
}
245
231
246
232
impl Serialize for Map < ' _ > {
247
- fn serialize < ' se > (
233
+ async fn serialize < ' se > (
248
234
& ' se self ,
249
235
serializer : & ' se mut dyn DynSerializer ,
250
- ) -> impl Future < Output = Result < ( ) , MerdeError < ' static > > > + ' se {
251
- async {
252
- serializer
253
- . write ( Event :: MapStart ( MapStart {
254
- size_hint : Some ( self . len ( ) ) ,
255
- } ) )
256
- . await ?;
257
- for ( key, value) in self . iter ( ) {
258
- serializer. write ( Event :: Str ( CowStr :: Borrowed ( key) ) ) . await ?;
259
- value. serialize ( serializer) . await ?;
260
- }
261
- serializer. write ( Event :: MapEnd ) . await
236
+ ) -> Result < ( ) , MerdeError < ' static > > {
237
+ serializer
238
+ . write ( Event :: MapStart ( MapStart {
239
+ size_hint : Some ( self . len ( ) ) ,
240
+ } ) )
241
+ . await ?;
242
+ for ( key, value) in self . iter ( ) {
243
+ serializer. write ( Event :: Str ( CowStr :: Borrowed ( key) ) ) . await ?;
244
+ value. serialize ( serializer) . await ?;
262
245
}
246
+ serializer. write ( Event :: MapEnd ) . await
263
247
}
264
248
}
265
249
266
250
impl Serialize for Array < ' _ > {
267
- fn serialize < ' se > (
251
+ async fn serialize < ' se > (
268
252
& ' se self ,
269
253
serializer : & ' se mut dyn DynSerializer ,
270
- ) -> impl Future < Output = Result < ( ) , MerdeError < ' static > > > + ' se {
271
- async {
272
- serializer
273
- . write ( Event :: ArrayStart ( ArrayStart {
274
- size_hint : Some ( self . len ( ) ) ,
275
- } ) )
276
- . await ?;
277
- for item in self . iter ( ) {
278
- item. serialize ( serializer) . await ?;
279
- }
280
- serializer. write ( Event :: ArrayEnd ) . await
254
+ ) -> Result < ( ) , MerdeError < ' static > > {
255
+ serializer
256
+ . write ( Event :: ArrayStart ( ArrayStart {
257
+ size_hint : Some ( self . len ( ) ) ,
258
+ } ) )
259
+ . await ?;
260
+ for item in self . iter ( ) {
261
+ item. serialize ( serializer) . await ?;
281
262
}
263
+ serializer. write ( Event :: ArrayEnd ) . await
282
264
}
283
265
}
284
266
285
267
impl Serialize for Value < ' _ > {
286
- fn serialize < ' se > (
268
+ async fn serialize < ' se > (
287
269
& ' se self ,
288
270
serializer : & ' se mut dyn DynSerializer ,
289
- ) -> impl Future < Output = Result < ( ) , MerdeError < ' static > > > + ' se {
290
- async move {
291
- match self {
292
- Value :: I64 ( i) => serializer. write ( Event :: I64 ( * i) ) . await ,
293
- Value :: U64 ( u) => serializer. write ( Event :: U64 ( * u) ) . await ,
294
- Value :: Float ( f) => serializer. write ( Event :: F64 ( f. into_inner ( ) ) ) . await ,
295
- Value :: Str ( s) => serializer. write ( Event :: Str ( s. clone ( ) ) ) . await ,
296
- Value :: Bytes ( b) => serializer. write ( Event :: Bytes ( b. clone ( ) ) ) . await ,
297
- Value :: Null => serializer. write ( Event :: Null ) . await ,
298
- Value :: Bool ( b) => serializer. write ( Event :: Bool ( * b) ) . await ,
299
- Value :: Array ( arr) => {
300
- arr. serialize ( serializer)
301
- . with_metastack_resume_point ( )
302
- . await
303
- }
304
- Value :: Map ( map) => {
305
- map. serialize ( serializer)
306
- . with_metastack_resume_point ( )
307
- . await
308
- }
271
+ ) -> Result < ( ) , MerdeError < ' static > > {
272
+ match self {
273
+ Value :: I64 ( i) => serializer. write ( Event :: I64 ( * i) ) . await ,
274
+ Value :: U64 ( u) => serializer. write ( Event :: U64 ( * u) ) . await ,
275
+ Value :: Float ( f) => serializer. write ( Event :: F64 ( f. into_inner ( ) ) ) . await ,
276
+ Value :: Str ( s) => serializer. write ( Event :: Str ( s. clone ( ) ) ) . await ,
277
+ Value :: Bytes ( b) => serializer. write ( Event :: Bytes ( b. clone ( ) ) ) . await ,
278
+ Value :: Null => serializer. write ( Event :: Null ) . await ,
279
+ Value :: Bool ( b) => serializer. write ( Event :: Bool ( * b) ) . await ,
280
+ Value :: Array ( arr) => {
281
+ arr. serialize ( serializer)
282
+ . with_metastack_resume_point ( )
283
+ . await
284
+ }
285
+ Value :: Map ( map) => {
286
+ map. serialize ( serializer)
287
+ . with_metastack_resume_point ( )
288
+ . await
309
289
}
310
290
}
311
291
}
@@ -314,18 +294,16 @@ impl Serialize for Value<'_> {
314
294
macro_rules! impl_serialize_for_tuple {
315
295
( $( $type_arg: ident) ,* ) => {
316
296
impl <$( $type_arg: Serialize ) ,* > Serialize for ( $( $type_arg) ,* , ) {
317
- fn serialize<' se>(
297
+ async fn serialize<' se>(
318
298
& ' se self ,
319
299
serializer: & ' se mut dyn DynSerializer ,
320
- ) -> impl Future <Output = Result <( ) , MerdeError <' static >>> + ' se {
321
- async move {
322
- serializer. write( Event :: ArrayStart ( ArrayStart {
323
- size_hint: Some ( count_tup!( $( $type_arg) * ) )
324
- } ) ) . await ?;
325
-
326
- impl_serialize_for_tuple!( @inner self serializer _field => _field ( ) ( $( $type_arg) * ) ) ;
327
- serializer. write( Event :: ArrayEnd ) . await
328
- }
300
+ ) -> Result <( ) , MerdeError <' static >> {
301
+ serializer. write( Event :: ArrayStart ( ArrayStart {
302
+ size_hint: Some ( count_tup!( $( $type_arg) * ) )
303
+ } ) ) . await ?;
304
+
305
+ impl_serialize_for_tuple!( @inner self serializer _field => _field ( ) ( $( $type_arg) * ) ) ;
306
+ serializer. write( Event :: ArrayEnd ) . await
329
307
}
330
308
}
331
309
} ;
0 commit comments