simplified append_list, read_list
This commit is contained in:
parent
bfe1b6e823
commit
7f1bc7de05
|
@ -1,5 +1,4 @@
|
|||
use block_header::BlockHeader;
|
||||
use compact_integer::CompactInteger;
|
||||
use crypto::dhash256;
|
||||
use hash::H256;
|
||||
use merkle_root::merkle_root;
|
||||
|
@ -16,7 +15,6 @@ impl Serializable for Block {
|
|||
fn serialize(&self, stream: &mut Stream) {
|
||||
stream
|
||||
.append(&self.block_header)
|
||||
.append(&CompactInteger::from(self.transactions.len()))
|
||||
.append_list(&self.transactions);
|
||||
}
|
||||
}
|
||||
|
@ -24,8 +22,7 @@ impl Serializable for Block {
|
|||
impl Deserializable for Block {
|
||||
fn deserialize(reader: &mut Reader) -> Result<Self, ReaderError> where Self: Sized {
|
||||
let block_header = try!(reader.read());
|
||||
let tx_len = try!(reader.read::<CompactInteger>());
|
||||
let transactions = try!(reader.read_list(tx_len.into()));
|
||||
let transactions = try!(reader.read_list());
|
||||
|
||||
let result = Block {
|
||||
block_header: block_header,
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
use std::{io, cmp};
|
||||
use byteorder::{LittleEndian, ReadBytesExt};
|
||||
use compact_integer::CompactInteger;
|
||||
|
||||
pub fn deserialize<T>(buffer: &[u8]) -> Result<T, Error> where T: Deserializable {
|
||||
let mut reader = Reader::new(buffer);
|
||||
|
@ -65,7 +66,8 @@ impl<'a> Reader<'a> {
|
|||
Ok(result)
|
||||
}
|
||||
|
||||
pub fn read_list<T>(&mut self, len: usize) -> Result<Vec<T>, Error> where T: Deserializable {
|
||||
pub fn read_list<T>(&mut self) -> Result<Vec<T>, Error> where T: Deserializable {
|
||||
let len: usize = try!(self.read::<CompactInteger>()).into();
|
||||
let mut result = vec![];
|
||||
|
||||
for _ in 0..len {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
//! Stream used for serialization.
|
||||
use std::io::{self, Write};
|
||||
use byteorder::{LittleEndian, WriteBytesExt};
|
||||
use compact_integer::CompactInteger;
|
||||
|
||||
pub fn serialize(t: &Serializable) -> Vec<u8> {
|
||||
let mut stream = Stream::default();
|
||||
|
@ -35,6 +36,7 @@ impl Stream {
|
|||
|
||||
/// Appends a list of serializable structs to the end of the stream.
|
||||
pub fn append_list<T>(&mut self, t: &[T]) -> &mut Self where T: Serializable {
|
||||
CompactInteger::from(t.len()).serialize(self);
|
||||
for i in t {
|
||||
i.serialize(self);
|
||||
}
|
||||
|
|
|
@ -8,7 +8,6 @@ use reader::{Deserializable, Reader, Error as ReaderError, deserialize};
|
|||
use crypto::dhash256;
|
||||
use hash::H256;
|
||||
use stream::{Serializable, Stream, serialize};
|
||||
use compact_integer::CompactInteger;
|
||||
|
||||
// Below flags apply in the context of BIP 68
|
||||
// If this flag set, CTxIn::nSequence is NOT interpreted as a
|
||||
|
@ -172,9 +171,7 @@ impl Serializable for Transaction {
|
|||
fn serialize(&self, stream: &mut Stream) {
|
||||
stream
|
||||
.append(&self.version)
|
||||
.append(&CompactInteger::from(self.inputs.len()))
|
||||
.append_list(&self.inputs)
|
||||
.append(&CompactInteger::from(self.outputs.len()))
|
||||
.append_list(&self.outputs)
|
||||
.append(&self.lock_time);
|
||||
}
|
||||
|
@ -183,10 +180,8 @@ impl Serializable for Transaction {
|
|||
impl Deserializable for Transaction {
|
||||
fn deserialize(reader: &mut Reader) -> Result<Self, ReaderError> where Self: Sized {
|
||||
let version = try!(reader.read());
|
||||
let tx_inputs_len= try!(reader.read::<CompactInteger>());
|
||||
let tx_inputs = try!(reader.read_list(tx_inputs_len.into()));
|
||||
let tx_outputs_len= try!(reader.read::<CompactInteger>());
|
||||
let tx_outputs = try!(reader.read_list(tx_outputs_len.into()));
|
||||
let tx_inputs = try!(reader.read_list());
|
||||
let tx_outputs = try!(reader.read_list());
|
||||
let lock_time = try!(reader.read());
|
||||
|
||||
let result = Transaction {
|
||||
|
|
Loading…
Reference in New Issue