@@ -12,6 +12,8 @@ pub struct ConfigSerializer {
12
12
pub output : Config ,
13
13
}
14
14
15
+ pub struct SeqSerializer < ' a > ( & ' a mut ConfigSerializer ) ;
16
+
15
17
impl ConfigSerializer {
16
18
fn serialize_primitive < T > ( & mut self , value : T ) -> Result < ( ) >
17
19
where
@@ -85,10 +87,10 @@ impl ConfigSerializer {
85
87
impl < ' a > ser:: Serializer for & ' a mut ConfigSerializer {
86
88
type Ok = ( ) ;
87
89
type Error = ConfigError ;
88
- type SerializeSeq = Self ;
89
- type SerializeTuple = Self ;
90
- type SerializeTupleStruct = Self ;
91
- type SerializeTupleVariant = Self ;
90
+ type SerializeSeq = SeqSerializer < ' a > ;
91
+ type SerializeTuple = SeqSerializer < ' a > ;
92
+ type SerializeTupleStruct = SeqSerializer < ' a > ;
93
+ type SerializeTupleVariant = SeqSerializer < ' a > ;
92
94
type SerializeMap = Self ;
93
95
type SerializeStruct = Self ;
94
96
type SerializeStructVariant = Self ;
@@ -159,7 +161,8 @@ impl<'a> ser::Serializer for &'a mut ConfigSerializer {
159
161
for byte in v {
160
162
seq. serialize_element ( byte) ?;
161
163
}
162
- seq. end ( )
164
+ seq. end ( ) ;
165
+ Ok ( ( ) )
163
166
}
164
167
165
168
fn serialize_none ( self ) -> Result < Self :: Ok > {
@@ -214,7 +217,7 @@ impl<'a> ser::Serializer for &'a mut ConfigSerializer {
214
217
}
215
218
216
219
fn serialize_seq ( self , _len : Option < usize > ) -> Result < Self :: SerializeSeq > {
217
- Ok ( self )
220
+ SeqSerializer :: new ( self )
218
221
}
219
222
220
223
fn serialize_tuple ( self , len : usize ) -> Result < Self :: SerializeTuple > {
@@ -260,25 +263,36 @@ impl<'a> ser::Serializer for &'a mut ConfigSerializer {
260
263
}
261
264
}
262
265
263
- impl < ' a > ser:: SerializeSeq for & ' a mut ConfigSerializer {
266
+ impl < ' a > SeqSerializer < ' a > {
267
+ fn new ( inner : & ' a mut ConfigSerializer ) -> Result < Self > {
268
+ Ok ( SeqSerializer ( inner) )
269
+ }
270
+
271
+ fn end ( self ) -> & ' a mut ConfigSerializer {
272
+ self . 0
273
+ }
274
+ }
275
+
276
+ impl < ' a > ser:: SerializeSeq for SeqSerializer < ' a > {
264
277
type Ok = ( ) ;
265
278
type Error = ConfigError ;
266
279
267
280
fn serialize_element < T > ( & mut self , value : & T ) -> Result < ( ) >
268
281
where
269
282
T : ?Sized + ser:: Serialize ,
270
283
{
271
- self . inc_last_key_index ( ) ?;
272
- value. serialize ( & mut * * self ) ?;
284
+ self . 0 . inc_last_key_index ( ) ?;
285
+ value. serialize ( & mut * ( self . 0 ) ) ?;
273
286
Ok ( ( ) )
274
287
}
275
288
276
289
fn end ( self ) -> Result < Self :: Ok > {
290
+ self . end ( ) ;
277
291
Ok ( ( ) )
278
292
}
279
293
}
280
294
281
- impl < ' a > ser:: SerializeTuple for & ' a mut ConfigSerializer {
295
+ impl < ' a > ser:: SerializeTuple for SeqSerializer < ' a > {
282
296
type Ok = ( ) ;
283
297
type Error = ConfigError ;
284
298
@@ -294,7 +308,7 @@ impl<'a> ser::SerializeTuple for &'a mut ConfigSerializer {
294
308
}
295
309
}
296
310
297
- impl < ' a > ser:: SerializeTupleStruct for & ' a mut ConfigSerializer {
311
+ impl < ' a > ser:: SerializeTupleStruct for SeqSerializer < ' a > {
298
312
type Ok = ( ) ;
299
313
type Error = ConfigError ;
300
314
@@ -310,7 +324,7 @@ impl<'a> ser::SerializeTupleStruct for &'a mut ConfigSerializer {
310
324
}
311
325
}
312
326
313
- impl < ' a > ser:: SerializeTupleVariant for & ' a mut ConfigSerializer {
327
+ impl < ' a > ser:: SerializeTupleVariant for SeqSerializer < ' a > {
314
328
type Ok = ( ) ;
315
329
type Error = ConfigError ;
316
330
@@ -322,8 +336,8 @@ impl<'a> ser::SerializeTupleVariant for &'a mut ConfigSerializer {
322
336
}
323
337
324
338
fn end ( self ) -> Result < Self :: Ok > {
325
- ser :: SerializeSeq :: end ( & mut * self ) ? ;
326
- self . pop_key ( ) ;
339
+ let inner = self . end ( ) ;
340
+ inner . pop_key ( ) ;
327
341
Ok ( ( ) )
328
342
}
329
343
}
0 commit comments