mirror of
https://github.com/fluencelabs/parity-wasm
synced 2025-06-14 07:21:42 +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::global_entry::GlobalEntry;
|
||||||
pub use self::primitives::{
|
pub use self::primitives::{
|
||||||
VarUint32, VarUint7, VarUint1, VarInt7, Uint32,
|
VarUint32, VarUint7, VarUint1, VarInt7, Uint32,
|
||||||
Uint64, VarUint64, CountedList, CountedWriter,
|
Uint64, VarUint64, CountedList, CountedWriter, CountedListWriter,
|
||||||
};
|
};
|
||||||
pub use self::types::{ValueType, BlockType};
|
pub use self::types::{ValueType, BlockType};
|
||||||
pub use self::ops::{Opcode, Opcodes, InitExpr};
|
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 }
|
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;
|
type Error = T::Error;
|
||||||
|
|
||||||
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::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)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
use std::io;
|
use std::io;
|
||||||
use std::io::Write;
|
|
||||||
use super::{
|
use super::{
|
||||||
Serialize,
|
Serialize,
|
||||||
Deserialize,
|
Deserialize,
|
||||||
@ -18,6 +17,7 @@ use super::{
|
|||||||
ElementSegment,
|
ElementSegment,
|
||||||
DataSegment,
|
DataSegment,
|
||||||
CountedWriter,
|
CountedWriter,
|
||||||
|
CountedListWriter,
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::types::Type;
|
use super::types::Type;
|
||||||
@ -296,10 +296,12 @@ impl Serialize for DataSection {
|
|||||||
type Error = Error;
|
type Error = Error;
|
||||||
|
|
||||||
fn serialize<W: io::Write>(self, writer: &mut W) -> Result<(), Self::Error> {
|
fn serialize<W: io::Write>(self, writer: &mut W) -> Result<(), Self::Error> {
|
||||||
let mut counted_writer = CountedWriter::new(writer);
|
let data = self.0;
|
||||||
let test = vec![0u8; 12];
|
let counted_list = CountedListWriter::<DataSegment, _>(
|
||||||
counted_writer.write(&test[..])?;
|
data.len(),
|
||||||
counted_writer.done()?;
|
data.into_iter().map(Into::into),
|
||||||
|
);
|
||||||
|
counted_list.serialize(writer)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use std::io;
|
use std::io;
|
||||||
use super::{Deserialize, Error, VarUint32, CountedList, InitExpr};
|
use super::{Deserialize, Serialize, Error, VarUint32, CountedList, InitExpr};
|
||||||
|
|
||||||
pub struct ElementSegment {
|
pub struct ElementSegment {
|
||||||
index: u32,
|
index: u32,
|
||||||
@ -62,4 +62,12 @@ impl Deserialize for DataSegment {
|
|||||||
value: value_buf,
|
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