/// A trait that various rust-lightning types implement allowing them to be written out to a Writer
pub trait Writeable<W: Writer> {
/// Writes self out to the given Writer
- fn write(&self, writer: &mut W) -> Result<(), DecodeError>;
+ fn write(&self, writer: &mut W) -> Result<(), ::std::io::Error>;
}
/// A trait that various rust-lightning types implement allowing them to be read in from a Read
($val_type:ty, $meth_write:ident, $len: expr, $meth_read:ident) => {
impl<W: Writer> Writeable<W> for $val_type {
#[inline]
- fn write(&self, writer: &mut W) -> Result<(), DecodeError> {
- Ok(writer.write_all(&$meth_write(*self))?)
+ fn write(&self, writer: &mut W) -> Result<(), ::std::io::Error> {
+ writer.write_all(&$meth_write(*self))
}
}
impl<R: Read> Readable<R> for $val_type {
impl<W: Writer> Writeable<W> for u8 {
#[inline]
- fn write(&self, writer: &mut W) -> Result<(), DecodeError> {
- Ok(writer.write_all(&[*self])?)
+ fn write(&self, writer: &mut W) -> Result<(), ::std::io::Error> {
+ writer.write_all(&[*self])
}
}
impl<R: Read> Readable<R> for u8 {
impl<W: Writer> Writeable<W> for bool {
#[inline]
- fn write(&self, writer: &mut W) -> Result<(), DecodeError> {
- Ok(writer.write_all(&[if *self {1} else {0}])?)
+ fn write(&self, writer: &mut W) -> Result<(), ::std::io::Error> {
+ writer.write_all(&[if *self {1} else {0}])
}
}
impl<R: Read> Readable<R> for bool {
impl<W: Writer> Writeable<W> for [u8; $size]
{
#[inline]
- fn write(&self, w: &mut W) -> Result<(), DecodeError> {
- w.write_all(self)?;
- Ok(())
+ fn write(&self, w: &mut W) -> Result<(), ::std::io::Error> {
+ w.write_all(self)
}
}
V: Writeable<W>
{
#[inline]
- fn write(&self, w: &mut W) -> Result<(), DecodeError> {
+ fn write(&self, w: &mut W) -> Result<(), ::std::io::Error> {
(self.len() as u16).write(w)?;
for (key, value) in self.iter() {
key.write(w)?;
// Vectors
impl<W: Writer> Writeable<W> for Vec<u8> {
#[inline]
- fn write(&self, w: &mut W) -> Result<(), DecodeError> {
+ fn write(&self, w: &mut W) -> Result<(), ::std::io::Error> {
(self.len() as u16).write(w)?;
- Ok(w.write_all(&self)?)
+ w.write_all(&self)
}
}
}
impl<W: Writer> Writeable<W> for Vec<Signature> {
#[inline]
- fn write(&self, w: &mut W) -> Result<(), DecodeError> {
- let byte_size = (self.len() as usize)
- .checked_mul(33)
- .ok_or(DecodeError::BadLengthDescriptor)?;
- if byte_size > MAX_BUF_SIZE {
- return Err(DecodeError::BadLengthDescriptor);
- }
+ fn write(&self, w: &mut W) -> Result<(), ::std::io::Error> {
(self.len() as u16).write(w)?;
for e in self.iter() {
e.write(w)?;
}
impl<W: Writer> Writeable<W> for Script {
- fn write(&self, w: &mut W) -> Result<(), DecodeError> {
+ fn write(&self, w: &mut W) -> Result<(), ::std::io::Error> {
(self.len() as u16).write(w)?;
- Ok(w.write_all(self.as_bytes())?)
+ w.write_all(self.as_bytes())
}
}
}
impl<W: Writer> Writeable<W> for Option<Script> {
- fn write(&self, w: &mut W) -> Result<(), DecodeError> {
+ fn write(&self, w: &mut W) -> Result<(), ::std::io::Error> {
if let &Some(ref script) = self {
script.write(w)?;
}
}
impl<W: Writer> Writeable<W> for PublicKey {
- fn write(&self, w: &mut W) -> Result<(), DecodeError> {
+ fn write(&self, w: &mut W) -> Result<(), ::std::io::Error> {
self.serialize().write(w)
}
}
}
impl<W: Writer> Writeable<W> for Sha256dHash {
- fn write(&self, w: &mut W) -> Result<(), DecodeError> {
+ fn write(&self, w: &mut W) -> Result<(), ::std::io::Error> {
self.as_bytes().write(w)
}
}
}
impl<W: Writer> Writeable<W> for Signature {
- fn write(&self, w: &mut W) -> Result<(), DecodeError> {
+ fn write(&self, w: &mut W) -> Result<(), ::std::io::Error> {
self.serialize_compact(&Secp256k1::without_caps()).write(w)
}
}