macro_rules! impl_writeable { ($st:ident, {$($field:ident),*}) => { impl Writeable for $st { fn write(&self, w: &mut W) -> Result<(), DecodeError> { $( self.$field.write(w)?; )* Ok(()) } } impl Readable for $st { fn read(r: &mut R) -> Result { Ok(Self { $($field: Readable::read(r)?),* }) } } } }