Skip to content

Commit 169b260

Browse files
committed
Refactor tuple serialization into a macro
1 parent 7668240 commit 169b260

File tree

1 file changed

+28
-109
lines changed

1 file changed

+28
-109
lines changed

lightning/src/util/ser.rs

+28-109
Original file line numberDiff line numberDiff line change
@@ -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

15151434
impl Writeable for () {
15161435
fn write<W: Writer>(&self, _: &mut W) -> Result<(), io::Error> {

0 commit comments

Comments
 (0)