@@ -145,6 +145,43 @@ impl Decoder {
145
145
}
146
146
}
147
147
148
+ macro_rules! forward_to_deserialize {
149
+ ( $(
150
+ $name: ident ( $( $arg: ident : $ty: ty ) ,* ) ;
151
+ ) * ) => {
152
+ $(
153
+ forward_to_deserialize!{
154
+ func: $name ( $( $arg: $ty ) ,* ) ;
155
+ }
156
+ ) *
157
+ } ;
158
+
159
+ ( func: deserialize_enum ( $( $arg: ident : $ty: ty ) ,* ) ; ) => {
160
+ fn deserialize_enum<V >(
161
+ & mut self ,
162
+ $( _: $ty, ) *
163
+ _visitor: V ,
164
+ ) -> :: std:: result:: Result <V :: Value , Self :: Error >
165
+ where V : :: serde:: de:: EnumVisitor
166
+ {
167
+ Err ( :: serde:: de:: Error :: invalid_type( :: serde:: de:: Type :: Enum ) )
168
+ }
169
+ } ;
170
+
171
+ ( func: $name: ident ( $( $arg: ident : $ty: ty ) ,* ) ; ) => {
172
+ #[ inline]
173
+ fn $name<V >(
174
+ & mut self ,
175
+ $( _: $ty, ) *
176
+ visitor: V ,
177
+ ) -> :: std:: result:: Result <V :: Value , Self :: Error >
178
+ where V : :: serde:: de:: Visitor
179
+ {
180
+ self . deserialize( visitor)
181
+ }
182
+ } ;
183
+ }
184
+
148
185
impl Deserializer for Decoder {
149
186
type Error = DecoderError ;
150
187
@@ -244,6 +281,36 @@ impl Deserializer for Decoder {
244
281
{
245
282
visitor. visit_newtype_struct ( self )
246
283
}
284
+
285
+ forward_to_deserialize ! {
286
+ deserialize_bool( ) ;
287
+ deserialize_usize( ) ;
288
+ deserialize_u8( ) ;
289
+ deserialize_u16( ) ;
290
+ deserialize_u32( ) ;
291
+ deserialize_u64( ) ;
292
+ deserialize_isize( ) ;
293
+ deserialize_i8( ) ;
294
+ deserialize_i16( ) ;
295
+ deserialize_i32( ) ;
296
+ deserialize_i64( ) ;
297
+ deserialize_f32( ) ;
298
+ deserialize_f64( ) ;
299
+ deserialize_char( ) ;
300
+ deserialize_str( ) ;
301
+ deserialize_string( ) ;
302
+ deserialize_unit( ) ;
303
+ deserialize_seq( ) ;
304
+ deserialize_seq_fixed_size( len: usize ) ;
305
+ deserialize_bytes( ) ;
306
+ deserialize_map( ) ;
307
+ deserialize_unit_struct( name: & ' static str ) ;
308
+ deserialize_tuple_struct( name: & ' static str , len: usize ) ;
309
+ deserialize_struct( name: & ' static str , fields: & ' static [ & ' static str ] ) ;
310
+ deserialize_struct_field( ) ;
311
+ deserialize_tuple( len: usize ) ;
312
+ deserialize_ignored_any( ) ;
313
+ }
247
314
}
248
315
249
316
struct VariantDecoder < ' a > {
@@ -335,6 +402,39 @@ impl<'a> Deserializer for SeqDecoder<'a> {
335
402
visitor. visit_seq ( self )
336
403
}
337
404
}
405
+
406
+ forward_to_deserialize ! {
407
+ deserialize_bool( ) ;
408
+ deserialize_usize( ) ;
409
+ deserialize_u8( ) ;
410
+ deserialize_u16( ) ;
411
+ deserialize_u32( ) ;
412
+ deserialize_u64( ) ;
413
+ deserialize_isize( ) ;
414
+ deserialize_i8( ) ;
415
+ deserialize_i16( ) ;
416
+ deserialize_i32( ) ;
417
+ deserialize_i64( ) ;
418
+ deserialize_f32( ) ;
419
+ deserialize_f64( ) ;
420
+ deserialize_char( ) ;
421
+ deserialize_str( ) ;
422
+ deserialize_string( ) ;
423
+ deserialize_unit( ) ;
424
+ deserialize_option( ) ;
425
+ deserialize_seq( ) ;
426
+ deserialize_seq_fixed_size( len: usize ) ;
427
+ deserialize_bytes( ) ;
428
+ deserialize_map( ) ;
429
+ deserialize_unit_struct( name: & ' static str ) ;
430
+ deserialize_newtype_struct( name: & ' static str ) ;
431
+ deserialize_tuple_struct( name: & ' static str , len: usize ) ;
432
+ deserialize_struct( name: & ' static str , fields: & ' static [ & ' static str ] ) ;
433
+ deserialize_struct_field( ) ;
434
+ deserialize_tuple( len: usize ) ;
435
+ deserialize_enum( name: & ' static str , variants: & ' static [ & ' static str ] ) ;
436
+ deserialize_ignored_any( ) ;
437
+ }
338
438
}
339
439
340
440
impl < ' a > SeqVisitor for SeqDecoder < ' a > {
@@ -428,6 +528,38 @@ impl<'a> MapVisitor for MapDecoder<'a> {
428
528
{
429
529
visitor. visit_none ( )
430
530
}
531
+
532
+ forward_to_deserialize ! {
533
+ deserialize_bool( ) ;
534
+ deserialize_usize( ) ;
535
+ deserialize_u8( ) ;
536
+ deserialize_u16( ) ;
537
+ deserialize_u32( ) ;
538
+ deserialize_u64( ) ;
539
+ deserialize_isize( ) ;
540
+ deserialize_i8( ) ;
541
+ deserialize_i16( ) ;
542
+ deserialize_i32( ) ;
543
+ deserialize_i64( ) ;
544
+ deserialize_f32( ) ;
545
+ deserialize_f64( ) ;
546
+ deserialize_char( ) ;
547
+ deserialize_str( ) ;
548
+ deserialize_string( ) ;
549
+ deserialize_unit( ) ;
550
+ deserialize_newtype_struct( name: & ' static str ) ;
551
+ deserialize_seq( ) ;
552
+ deserialize_seq_fixed_size( len: usize ) ;
553
+ deserialize_bytes( ) ;
554
+ deserialize_map( ) ;
555
+ deserialize_unit_struct( name: & ' static str ) ;
556
+ deserialize_tuple_struct( name: & ' static str , len: usize ) ;
557
+ deserialize_struct( name: & ' static str , fields: & ' static [ & ' static str ] ) ;
558
+ deserialize_struct_field( ) ;
559
+ deserialize_tuple( len: usize ) ;
560
+ deserialize_enum( name: & ' static str , variants: & ' static [ & ' static str ] ) ;
561
+ deserialize_ignored_any( ) ;
562
+ }
431
563
}
432
564
433
565
Ok ( try!( Deserialize :: deserialize ( & mut UnitDecoder ) ) )
@@ -447,4 +579,37 @@ impl<'a> Deserializer for MapDecoder<'a> {
447
579
{
448
580
visitor. visit_map ( self )
449
581
}
582
+
583
+ forward_to_deserialize ! {
584
+ deserialize_bool( ) ;
585
+ deserialize_usize( ) ;
586
+ deserialize_u8( ) ;
587
+ deserialize_u16( ) ;
588
+ deserialize_u32( ) ;
589
+ deserialize_u64( ) ;
590
+ deserialize_isize( ) ;
591
+ deserialize_i8( ) ;
592
+ deserialize_i16( ) ;
593
+ deserialize_i32( ) ;
594
+ deserialize_i64( ) ;
595
+ deserialize_f32( ) ;
596
+ deserialize_f64( ) ;
597
+ deserialize_char( ) ;
598
+ deserialize_str( ) ;
599
+ deserialize_string( ) ;
600
+ deserialize_unit( ) ;
601
+ deserialize_option( ) ;
602
+ deserialize_seq( ) ;
603
+ deserialize_seq_fixed_size( len: usize ) ;
604
+ deserialize_bytes( ) ;
605
+ deserialize_map( ) ;
606
+ deserialize_unit_struct( name: & ' static str ) ;
607
+ deserialize_newtype_struct( name: & ' static str ) ;
608
+ deserialize_tuple_struct( name: & ' static str , len: usize ) ;
609
+ deserialize_struct( name: & ' static str , fields: & ' static [ & ' static str ] ) ;
610
+ deserialize_struct_field( ) ;
611
+ deserialize_tuple( len: usize ) ;
612
+ deserialize_enum( name: & ' static str , variants: & ' static [ & ' static str ] ) ;
613
+ deserialize_ignored_any( ) ;
614
+ }
450
615
}
0 commit comments