@@ -477,153 +477,43 @@ impl<D:Decoder,T:Decodable<D>> Decodable<D> for Option<T> {
477
477
}
478
478
}
479
479
480
- impl < S : Encoder , T0 : Encodable < S > , T1 : Encodable < S > > Encodable < S > for ( T0 , T1 ) {
481
- fn encode ( & self , s : & mut S ) {
482
- match * self {
483
- ( ref t0, ref t1) => {
484
- s. emit_seq ( 2 , |s| {
485
- s. emit_seq_elt ( 0 , |s| t0. encode ( s) ) ;
486
- s. emit_seq_elt ( 1 , |s| t1. encode ( s) ) ;
487
- } )
488
- }
489
- }
490
- }
491
- }
492
-
493
- impl < D : Decoder , T0 : Decodable < D > , T1 : Decodable < D > > Decodable < D > for ( T0 , T1 ) {
494
- fn decode ( d : & mut D ) -> ( T0 , T1 ) {
495
- d. read_seq ( |d, len| {
496
- assert_eq ! ( len, 2 ) ;
497
- (
498
- d. read_seq_elt ( 0 , |d| Decodable :: decode ( d) ) ,
499
- d. read_seq_elt ( 1 , |d| Decodable :: decode ( d) )
500
- )
501
- } )
502
- }
503
- }
504
-
505
- impl <
506
- S : Encoder ,
507
- T0 : Encodable < S > ,
508
- T1 : Encodable < S > ,
509
- T2 : Encodable < S >
510
- > Encodable < S > for ( T0 , T1 , T2 ) {
511
- fn encode ( & self , s : & mut S ) {
512
- match * self {
513
- ( ref t0, ref t1, ref t2) => {
514
- s. emit_seq ( 3 , |s| {
515
- s. emit_seq_elt ( 0 , |s| t0. encode ( s) ) ;
516
- s. emit_seq_elt ( 1 , |s| t1. encode ( s) ) ;
517
- s. emit_seq_elt ( 2 , |s| t2. encode ( s) ) ;
518
- } )
519
- }
520
- }
521
- }
522
- }
523
-
524
- impl <
525
- D : Decoder ,
526
- T0 : Decodable < D > ,
527
- T1 : Decodable < D > ,
528
- T2 : Decodable < D >
529
- > Decodable < D > for ( T0 , T1 , T2 ) {
530
- fn decode ( d : & mut D ) -> ( T0 , T1 , T2 ) {
531
- d. read_seq ( |d, len| {
532
- assert_eq ! ( len, 3 ) ;
533
- (
534
- d. read_seq_elt ( 0 , |d| Decodable :: decode ( d) ) ,
535
- d. read_seq_elt ( 1 , |d| Decodable :: decode ( d) ) ,
536
- d. read_seq_elt ( 2 , |d| Decodable :: decode ( d) )
537
- )
538
- } )
539
- }
540
- }
541
-
542
- impl <
543
- S : Encoder ,
544
- T0 : Encodable < S > ,
545
- T1 : Encodable < S > ,
546
- T2 : Encodable < S > ,
547
- T3 : Encodable < S >
548
- > Encodable < S > for ( T0 , T1 , T2 , T3 ) {
549
- fn encode ( & self , s : & mut S ) {
550
- match * self {
551
- ( ref t0, ref t1, ref t2, ref t3) => {
552
- s. emit_seq ( 4 , |s| {
553
- s. emit_seq_elt ( 0 , |s| t0. encode ( s) ) ;
554
- s. emit_seq_elt ( 1 , |s| t1. encode ( s) ) ;
555
- s. emit_seq_elt ( 2 , |s| t2. encode ( s) ) ;
556
- s. emit_seq_elt ( 3 , |s| t3. encode ( s) ) ;
480
+ macro_rules! peel( ( $name: ident, $( $other: ident, ) * ) => ( tuple!( $( $other, ) * ) ) )
481
+
482
+ macro_rules! tuple (
483
+ ( ) => ( ) ;
484
+ ( $( $name: ident, ) + ) => (
485
+ impl <D : Decoder , $( $name: Decodable <D >) ,* > Decodable <D > for ( $( $name, ) * ) {
486
+ #[ allow( uppercase_variables) ]
487
+ fn decode( d: & mut D ) -> ( $( $name, ) * ) {
488
+ d. read_tuple( |d, amt| {
489
+ let mut i = 0 ;
490
+ let ret = ( $( d. read_tuple_arg( { i+=1 ; i-1 } , |d| -> $name {
491
+ Decodable :: decode( d)
492
+ } ) , ) * ) ;
493
+ assert!( amt == i,
494
+ "expected tuple of length `{}`, found tuple \
495
+ of length `{}`", i, amt) ;
496
+ return ret;
557
497
} )
558
498
}
559
499
}
560
- }
561
- }
562
-
563
- impl <
564
- D : Decoder ,
565
- T0 : Decodable < D > ,
566
- T1 : Decodable < D > ,
567
- T2 : Decodable < D > ,
568
- T3 : Decodable < D >
569
- > Decodable < D > for ( T0 , T1 , T2 , T3 ) {
570
- fn decode ( d : & mut D ) -> ( T0 , T1 , T2 , T3 ) {
571
- d. read_seq ( |d, len| {
572
- assert_eq ! ( len, 4 ) ;
573
- (
574
- d. read_seq_elt ( 0 , |d| Decodable :: decode ( d) ) ,
575
- d. read_seq_elt ( 1 , |d| Decodable :: decode ( d) ) ,
576
- d. read_seq_elt ( 2 , |d| Decodable :: decode ( d) ) ,
577
- d. read_seq_elt ( 3 , |d| Decodable :: decode ( d) )
578
- )
579
- } )
580
- }
581
- }
582
-
583
- impl <
584
- S : Encoder ,
585
- T0 : Encodable < S > ,
586
- T1 : Encodable < S > ,
587
- T2 : Encodable < S > ,
588
- T3 : Encodable < S > ,
589
- T4 : Encodable < S >
590
- > Encodable < S > for ( T0 , T1 , T2 , T3 , T4 ) {
591
- fn encode ( & self , s : & mut S ) {
592
- match * self {
593
- ( ref t0, ref t1, ref t2, ref t3, ref t4) => {
594
- s. emit_seq ( 5 , |s| {
595
- s. emit_seq_elt ( 0 , |s| t0. encode ( s) ) ;
596
- s. emit_seq_elt ( 1 , |s| t1. encode ( s) ) ;
597
- s. emit_seq_elt ( 2 , |s| t2. encode ( s) ) ;
598
- s. emit_seq_elt ( 3 , |s| t3. encode ( s) ) ;
599
- s. emit_seq_elt ( 4 , |s| t4. encode ( s) ) ;
500
+ impl <S : Encoder , $( $name: Encodable <S >) ,* > Encodable <S > for ( $( $name, ) * ) {
501
+ #[ allow( uppercase_variables) ]
502
+ fn encode( & self , s: & mut S ) {
503
+ let ( $( ref $name, ) * ) = * self ;
504
+ let mut n = 0 ;
505
+ $( let $name = $name; n += 1 ; ) *
506
+ s. emit_tuple( n, |s| {
507
+ let mut i = 0 ;
508
+ $( s. emit_seq_elt( { i+=1 ; i-1 } , |s| $name. encode( s) ) ; ) *
600
509
} )
601
510
}
602
511
}
603
- }
604
- }
512
+ peel!( $( $name, ) * )
513
+ )
514
+ )
605
515
606
- impl <
607
- D : Decoder ,
608
- T0 : Decodable < D > ,
609
- T1 : Decodable < D > ,
610
- T2 : Decodable < D > ,
611
- T3 : Decodable < D > ,
612
- T4 : Decodable < D >
613
- > Decodable < D > for ( T0 , T1 , T2 , T3 , T4 ) {
614
- fn decode ( d : & mut D ) -> ( T0 , T1 , T2 , T3 , T4 ) {
615
- d. read_seq ( |d, len| {
616
- assert_eq ! ( len, 5 ) ;
617
- (
618
- d. read_seq_elt ( 0 , |d| Decodable :: decode ( d) ) ,
619
- d. read_seq_elt ( 1 , |d| Decodable :: decode ( d) ) ,
620
- d. read_seq_elt ( 2 , |d| Decodable :: decode ( d) ) ,
621
- d. read_seq_elt ( 3 , |d| Decodable :: decode ( d) ) ,
622
- d. read_seq_elt ( 4 , |d| Decodable :: decode ( d) )
623
- )
624
- } )
625
- }
626
- }
516
+ tuple ! { T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , }
627
517
628
518
impl < E : Encoder > Encodable < E > for path:: posix:: Path {
629
519
fn encode ( & self , e : & mut E ) {
0 commit comments