X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=src%2Futil%2Fser_macros.rs;h=09a319fb45951a043106f9ae6d7fe4d13b94779b;hb=ed30a199e35070c85fdf8199ec4ea65bcbec9a47;hp=619d8e2f782595f0c1b76927fffc7dcb76ca9e23;hpb=51ba6ad2e95d4ddb172b4d4d4b067f94fcdb0aac;p=rust-lightning diff --git a/src/util/ser_macros.rs b/src/util/ser_macros.rs index 619d8e2f..09a319fb 100644 --- a/src/util/ser_macros.rs +++ b/src/util/ser_macros.rs @@ -1,14 +1,36 @@ macro_rules! impl_writeable { - ($st:ident, {$($field:ident),*}) => { - impl Writeable for $st { - fn write(&self, w: &mut Writer) -> Result<(), DecodeError> { + ($st:ident, $len: expr, {$($field:ident),*}) => { + impl Writeable for $st { + fn write(&self, w: &mut W) -> Result<(), ::std::io::Error> { + w.size_hint($len); $( self.$field.write(w)?; )* Ok(()) } } - impl Readable for $st { - fn read(r: &mut Reader) -> Result { + impl Readable for $st { + fn read(r: &mut R) -> Result { + Ok(Self { + $($field: Readable::read(r)?),* + }) + } + } + } +} +macro_rules! impl_writeable_len_match { + ($st:ident, {$({$m: pat, $l: expr}),*}, {$($field:ident),*}) => { + impl Writeable for $st { + fn write(&self, w: &mut W) -> Result<(), ::std::io::Error> { + w.size_hint(match *self { + $($m => $l,)* + }); + $( self.$field.write(w)?; )* + Ok(()) + } + } + + impl Readable for $st { + fn read(r: &mut R) -> Result { Ok(Self { $($field: Readable::read(r)?),* })