X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;ds=sidebyside;f=lightning%2Fsrc%2Futil%2Fser.rs;fp=lightning%2Fsrc%2Futil%2Fser.rs;h=44fdd1c0cf4d3097d27e7abebb83e0a397f0ac86;hb=030c49cf781bf1892bf9451d5d0da28132f8397e;hp=1b98e341fad6f35e94e555528865ed1cee508b5a;hpb=3670dd086ca43295d186d3b957fa99a9d1c458f0;p=rust-lightning diff --git a/lightning/src/util/ser.rs b/lightning/src/util/ser.rs index 1b98e341..44fdd1c0 100644 --- a/lightning/src/util/ser.rs +++ b/lightning/src/util/ser.rs @@ -11,7 +11,9 @@ use std::cmp; use secp256k1::Signature; use secp256k1::key::{PublicKey, SecretKey}; use bitcoin::blockdata::script::Script; -use bitcoin::blockdata::transaction::OutPoint; +use bitcoin::blockdata::transaction::{OutPoint, Transaction}; +use bitcoin::consensus; +use bitcoin::consensus::Encodable; use bitcoin_hashes::sha256d::Hash as Sha256dHash; use std::marker::Sized; use ln::msgs::DecodeError; @@ -625,6 +627,27 @@ impl Readable for OutPoint { } } +impl Writeable for Transaction { + fn write(&self, writer: &mut W) -> Result<(), ::std::io::Error> { + match self.consensus_encode(WriterWriteAdaptor(writer)) { + Ok(_) => Ok(()), + Err(consensus::encode::Error::Io(e)) => Err(e), + Err(_) => panic!("We shouldn't get a consensus::encode::Error unless our Write generated an std::io::Error"), + } + } +} + +impl Readable for Transaction { + fn read(r: &mut R) -> Result { + match consensus::encode::Decodable::consensus_decode(r) { + Ok(t) => Ok(t), + Err(consensus::encode::Error::Io(ref e)) if e.kind() == ::std::io::ErrorKind::UnexpectedEof => Err(DecodeError::ShortRead), + Err(consensus::encode::Error::Io(e)) => Err(DecodeError::Io(e)), + Err(_) => Err(DecodeError::InvalidValue), + } + } +} + impl> Readable for Mutex { fn read(r: &mut R) -> Result { let t: T = Readable::read(r)?;