mirror of
https://github.com/fluencelabs/parity-wasm
synced 2025-06-14 15:31:44 +00:00
serialization stubs
This commit is contained in:
@ -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};
|
||||
|
@ -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 {
|
||||
|
||||
|
@ -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(())
|
||||
}
|
||||
}
|
||||
|
@ -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(())
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user