@@ -1398,119 +1398,38 @@ impl<T: Writeable> Writeable for RwLock<T> {
1398
1398
}
1399
1399
}
1400
1400
1401
- impl < A : Readable , B : Readable > Readable for ( A , B ) {
1402
- fn read < R : Read > ( r : & mut R ) -> Result < Self , DecodeError > {
1403
- let a: A = Readable :: read ( r) ?;
1404
- let b: B = Readable :: read ( r) ?;
1405
- Ok ( ( a, b) )
1406
- }
1407
- }
1408
- impl < A : Writeable , B : Writeable > Writeable for ( A , B ) {
1409
- fn write < W : Writer > ( & self , w : & mut W ) -> Result < ( ) , io:: Error > {
1410
- self . 0 . write ( w) ?;
1411
- self . 1 . write ( w)
1412
- }
1413
- }
1414
-
1415
- impl < A : Readable , B : Readable , C : Readable > Readable for ( A , B , C ) {
1416
- fn read < R : Read > ( r : & mut R ) -> Result < Self , DecodeError > {
1417
- let a: A = Readable :: read ( r) ?;
1418
- let b: B = Readable :: read ( r) ?;
1419
- let c: C = Readable :: read ( r) ?;
1420
- Ok ( ( a, b, c) )
1421
- }
1422
- }
1423
- impl < A : Writeable , B : Writeable , C : Writeable > Writeable for ( A , B , C ) {
1424
- fn write < W : Writer > ( & self , w : & mut W ) -> Result < ( ) , io:: Error > {
1425
- self . 0 . write ( w) ?;
1426
- self . 1 . write ( w) ?;
1427
- self . 2 . write ( w)
1428
- }
1429
- }
1430
-
1431
- impl < A : Readable , B : Readable , C : Readable , D : Readable > Readable for ( A , B , C , D ) {
1432
- fn read < R : Read > ( r : & mut R ) -> Result < Self , DecodeError > {
1433
- let a: A = Readable :: read ( r) ?;
1434
- let b: B = Readable :: read ( r) ?;
1435
- let c: C = Readable :: read ( r) ?;
1436
- let d: D = Readable :: read ( r) ?;
1437
- Ok ( ( a, b, c, d) )
1438
- }
1439
- }
1440
- impl < A : Writeable , B : Writeable , C : Writeable , D : Writeable > Writeable for ( A , B , C , D ) {
1441
- fn write < W : Writer > ( & self , w : & mut W ) -> Result < ( ) , io:: Error > {
1442
- self . 0 . write ( w) ?;
1443
- self . 1 . write ( w) ?;
1444
- self . 2 . write ( w) ?;
1445
- self . 3 . write ( w)
1446
- }
1447
- }
1448
-
1449
- impl < A : Readable , B : Readable , C : Readable , D : Readable , E : Readable > Readable for ( A , B , C , D , E ) {
1450
- fn read < R : Read > ( r : & mut R ) -> Result < Self , DecodeError > {
1451
- let a: A = Readable :: read ( r) ?;
1452
- let b: B = Readable :: read ( r) ?;
1453
- let c: C = Readable :: read ( r) ?;
1454
- let d: D = Readable :: read ( r) ?;
1455
- let e: E = Readable :: read ( r) ?;
1456
- Ok ( ( a, b, c, d, e) )
1457
- }
1458
- }
1459
- impl < A : Writeable , B : Writeable , C : Writeable , D : Writeable , E : Writeable > Writeable for ( A , B , C , D , E ) {
1460
- fn write < W : Writer > ( & self , w : & mut W ) -> Result < ( ) , io:: Error > {
1461
- self . 0 . write ( w) ?;
1462
- self . 1 . write ( w) ?;
1463
- self . 2 . write ( w) ?;
1464
- self . 3 . write ( w) ?;
1465
- self . 4 . write ( w)
1466
- }
1467
- }
1401
+ macro_rules! impl_tuple_ser {
1402
+ ( $( $i: ident : $type: tt) ,* ) => {
1403
+ impl <$( $type) ,* > Readable for ( $( $type) ,* )
1404
+ where $(
1405
+ $type: Readable ,
1406
+ ) *
1407
+ {
1408
+ fn read<R : Read >( r: & mut R ) -> Result <Self , DecodeError > {
1409
+ Ok ( ( $( <$type as Readable >:: read( r) ?) ,* ) )
1410
+ }
1411
+ }
1468
1412
1469
- impl < A : Readable , B : Readable , C : Readable , D : Readable , E : Readable , F : Readable > Readable for ( A , B , C , D , E , F ) {
1470
- fn read < R : Read > ( r : & mut R ) -> Result < Self , DecodeError > {
1471
- let a: A = Readable :: read ( r) ?;
1472
- let b: B = Readable :: read ( r) ?;
1473
- let c: C = Readable :: read ( r) ?;
1474
- let d: D = Readable :: read ( r) ?;
1475
- let e: E = Readable :: read ( r) ?;
1476
- let f: F = Readable :: read ( r) ?;
1477
- Ok ( ( a, b, c, d, e, f) )
1478
- }
1479
- }
1480
- impl < A : Writeable , B : Writeable , C : Writeable , D : Writeable , E : Writeable , F : Writeable > Writeable for ( A , B , C , D , E , F ) {
1481
- fn write < W : Writer > ( & self , w : & mut W ) -> Result < ( ) , io:: Error > {
1482
- self . 0 . write ( w) ?;
1483
- self . 1 . write ( w) ?;
1484
- self . 2 . write ( w) ?;
1485
- self . 3 . write ( w) ?;
1486
- self . 4 . write ( w) ?;
1487
- self . 5 . write ( w)
1413
+ impl <$( $type) ,* > Writeable for ( $( $type) ,* )
1414
+ where $(
1415
+ $type: Writeable ,
1416
+ ) *
1417
+ {
1418
+ fn write<W : Writer >( & self , w: & mut W ) -> Result <( ) , io:: Error > {
1419
+ let ( $( $i) ,* ) = self ;
1420
+ $( $i. write( w) ?; ) *
1421
+ Ok ( ( ) )
1422
+ }
1423
+ }
1488
1424
}
1489
1425
}
1490
1426
1491
- impl < A : Readable , B : Readable , C : Readable , D : Readable , E : Readable , F : Readable , G : Readable > Readable for ( A , B , C , D , E , F , G ) {
1492
- fn read < R : Read > ( r : & mut R ) -> Result < Self , DecodeError > {
1493
- let a: A = Readable :: read ( r) ?;
1494
- let b: B = Readable :: read ( r) ?;
1495
- let c: C = Readable :: read ( r) ?;
1496
- let d: D = Readable :: read ( r) ?;
1497
- let e: E = Readable :: read ( r) ?;
1498
- let f: F = Readable :: read ( r) ?;
1499
- let g: G = Readable :: read ( r) ?;
1500
- Ok ( ( a, b, c, d, e, f, g) )
1501
- }
1502
- }
1503
- impl < A : Writeable , B : Writeable , C : Writeable , D : Writeable , E : Writeable , F : Writeable , G : Writeable > Writeable for ( A , B , C , D , E , F , G ) {
1504
- fn write < W : Writer > ( & self , w : & mut W ) -> Result < ( ) , io:: Error > {
1505
- self . 0 . write ( w) ?;
1506
- self . 1 . write ( w) ?;
1507
- self . 2 . write ( w) ?;
1508
- self . 3 . write ( w) ?;
1509
- self . 4 . write ( w) ?;
1510
- self . 5 . write ( w) ?;
1511
- self . 6 . write ( w)
1512
- }
1513
- }
1427
+ impl_tuple_ser ! ( a: A , b: B ) ;
1428
+ impl_tuple_ser ! ( a: A , b: B , c: C ) ;
1429
+ impl_tuple_ser ! ( a: A , b: B , c: C , d: D ) ;
1430
+ impl_tuple_ser ! ( a: A , b: B , c: C , d: D , e: E ) ;
1431
+ impl_tuple_ser ! ( a: A , b: B , c: C , d: D , e: E , f: F ) ;
1432
+ impl_tuple_ser ! ( a: A , b: B , c: C , d: D , e: E , f: F , g: G ) ;
1514
1433
1515
1434
impl Writeable for ( ) {
1516
1435
fn write < W : Writer > ( & self , _: & mut W ) -> Result < ( ) , io:: Error > {
0 commit comments