X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=src%2Futil%2Fser.rs;fp=src%2Futil%2Fser.rs;h=cd5e6a0db2cdb1959e9fcd9b69b930c3b30f9edd;hb=51ba6ad2e95d4ddb172b4d4d4b067f94fcdb0aac;hp=299515d9022ed46341754d2eca417a5f48f85fce;hpb=97488ad36e4e22cc1d6ae3832a0cb6c1bcb1dc94;p=rust-lightning diff --git a/src/util/ser.rs b/src/util/ser.rs index 299515d9..cd5e6a0d 100644 --- a/src/util/ser.rs +++ b/src/util/ser.rs @@ -15,25 +15,36 @@ use util::byte_utils::{be64_to_array, be32_to_array, be16_to_array, slice_to_be1 const MAX_BUF_SIZE: usize = 64 * 1024; -pub struct Writer { writer: W } -pub struct Reader { reader: R } - +/// A struct that holds an std::io::Write-impl'ing object and implements various +/// rust-lightning-specific write functions. +pub struct Writer { writer: W } +/// A struct that holds an std::io::Read-impl'ing object and implements various +/// rust-lightning-specific read functions. +pub struct Reader { reader: R } + +/// A trait that various rust-lightning types implement allowing them to be written out to a Writer pub trait Writeable { + /// Writes self out to the given Writer fn write(&self, writer: &mut Writer) -> Result<(), DecodeError>; } +/// A trait that various rust-lightning types implement allowing them to be read in from a Reader pub trait Readable where Self: Sized, R: Read { + /// Reads a Self in from the given Reader fn read(reader: &mut Reader) -> Result; } impl Writer { + /// Creates a new Writer from an std::io::Write-impl'ing object pub fn new(writer: W) -> Writer { return Writer { writer } } + /// Consumes this object and returns the original writer pub fn into_inner(self) -> W { self.writer } + /// Gets a reference to the original writer pub fn get_ref(&self) -> &W { &self.writer } fn write_u64(&mut self, v: u64) -> Result<(), DecodeError> { Ok(self.writer.write_all(&be64_to_array(v))?) @@ -50,16 +61,19 @@ impl Writer { fn write_bool(&mut self, v: bool) -> Result<(), DecodeError> { Ok(self.writer.write_all(&[if v {1} else {0}])?) } - pub fn write_all(&mut self, v: &[u8]) -> Result<(), DecodeError> { + pub(crate) fn write_all(&mut self, v: &[u8]) -> Result<(), DecodeError> { Ok(self.writer.write_all(v)?) } } impl Reader { + /// Creates a new Reader from an std::io::Read-impl'ing object pub fn new(reader: R) -> Reader { return Reader { reader } } + /// Consumes this object and returns the original reader pub fn into_inner(self) -> R { self.reader } + /// Gets a reference to the original reader pub fn get_ref(&self) -> &R { &self.reader } fn read_u64(&mut self) -> Result { @@ -93,10 +107,10 @@ impl Reader { } Ok(buf[0] == 1) } - pub fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), DecodeError> { + pub(crate) fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), DecodeError> { Ok(self.reader.read_exact(buf)?) } - pub fn read_to_end(&mut self, buf: &mut Vec) -> Result { + pub(crate) fn read_to_end(&mut self, buf: &mut Vec) -> Result { Ok(self.reader.read_to_end(buf)?) } } @@ -306,22 +320,3 @@ impl Readable for Signature { } } } - -macro_rules! impl_writeable { - ($st:ident, {$($field:ident),*}) => { - impl Writeable for $st { - fn write(&self, w: &mut Writer) -> Result<(), DecodeError> { - $( self.$field.write(w)?; )* - Ok(()) - } - } - - impl Readable for $st { - fn read(r: &mut Reader) -> Result { - Ok(Self { - $($field: Readable::read(r)?),* - }) - } - } - } -}