serialization stubs

This commit is contained in:
NikVolf
2017-04-03 15:56:37 +03:00
parent 5adcae761c
commit ce0c1551fa
4 changed files with 34 additions and 8 deletions

View File

@ -18,7 +18,7 @@ pub use self::export_entry::{ExportEntry, Internal};
pub use self::global_entry::GlobalEntry;
pub use self::primitives::{
VarUint32, VarUint7, VarUint1, VarInt7, Uint32,
Uint64, VarUint64, CountedList, CountedWriter,
Uint64, VarUint64, CountedList, CountedWriter, CountedListWriter,
};
pub use self::types::{ValueType, BlockType};
pub use self::ops::{Opcode, Opcodes, InitExpr};

View File

@ -221,7 +221,7 @@ impl<T: Deserialize> CountedList<T> {
pub fn into_inner(self) -> Vec<T> { self.0 }
}
impl<T: Deserialize> Deserialize for CountedList<T> where T::Error : From<Error> {
impl<T: Deserialize> Deserialize for CountedList<T> where T::Error: From<Error> {
type Error = T::Error;
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
@ -272,6 +272,22 @@ impl<'a, W: 'a + io::Write> io::Write for CountedWriter<'a, W> {
}
}
pub struct CountedListWriter<I: Serialize<Error=::elements::Error>, T: IntoIterator<Item=I>>(pub usize, pub T);
impl<I: Serialize<Error=::elements::Error>, T: IntoIterator<Item=I>> Serialize for CountedListWriter<I, T> {
type Error = Error;
fn serialize<W: io::Write>(self, writer: &mut W) -> Result<(), Self::Error> {
let len_us = self.0;
let data = self.1;
let len: VarUint32 = len_us.into();
len.serialize(writer)?;
for data_element in data { data_element.serialize(writer)? }
Ok(())
}
}
#[cfg(test)]
mod tests {

View File

@ -1,5 +1,4 @@
use std::io;
use std::io::Write;
use super::{
Serialize,
Deserialize,
@ -18,6 +17,7 @@ use super::{
ElementSegment,
DataSegment,
CountedWriter,
CountedListWriter,
};
use super::types::Type;
@ -296,10 +296,12 @@ impl Serialize for DataSection {
type Error = Error;
fn serialize<W: io::Write>(self, writer: &mut W) -> Result<(), Self::Error> {
let mut counted_writer = CountedWriter::new(writer);
let test = vec![0u8; 12];
counted_writer.write(&test[..])?;
counted_writer.done()?;
let data = self.0;
let counted_list = CountedListWriter::<DataSegment, _>(
data.len(),
data.into_iter().map(Into::into),
);
counted_list.serialize(writer)?;
Ok(())
}
}

View File

@ -1,5 +1,5 @@
use std::io;
use super::{Deserialize, Error, VarUint32, CountedList, InitExpr};
use super::{Deserialize, Serialize, Error, VarUint32, CountedList, InitExpr};
pub struct ElementSegment {
index: u32,
@ -62,4 +62,12 @@ impl Deserialize for DataSegment {
value: value_buf,
})
}
}
impl Serialize for DataSegment {
type Error = Error;
fn serialize<W: io::Write>(self, writer: &mut W) -> Result<(), Self::Error> {
Ok(())
}
}