@@ -1398,119 +1398,38 @@ impl<T: Writeable> Writeable for RwLock<T> {
13981398 }
13991399}
14001400
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+ }
14681412
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+ }
14881424 }
14891425}
14901426
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 ) ;
15141433
15151434impl Writeable for ( ) {
15161435 fn write < W : Writer > ( & self , _: & mut W ) -> Result < ( ) , io:: Error > {
0 commit comments