1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
macro_rules! impl_writeable { ($st:ident, $len: expr, {$($field:ident),*}) => { impl ::util::ser::Writeable for $st { fn write<W: ::util::ser::Writer>(&self, w: &mut W) -> Result<(), ::std::io::Error> { if $len != 0 { w.size_hint($len); } $( self.$field.write(w)?; )* Ok(()) } } impl<R: ::std::io::Read> ::util::ser::Readable<R> for $st { fn read(r: &mut R) -> Result<Self, ::ln::msgs::DecodeError> { Ok(Self { $($field: ::util::ser::Readable::read(r)?),* }) } } } } macro_rules! impl_writeable_len_match { ($st:ident, {$({$m: pat, $l: expr}),*}, {$($field:ident),*}) => { impl Writeable for $st { fn write<W: Writer>(&self, w: &mut W) -> Result<(), ::std::io::Error> { w.size_hint(match *self { $($m => $l,)* }); $( self.$field.write(w)?; )* Ok(()) } } impl<R: ::std::io::Read> Readable<R> for $st { fn read(r: &mut R) -> Result<Self, DecodeError> { Ok(Self { $($field: Readable::read(r)?),* }) } } } }