working sections parse

This commit is contained in:
NikVolf
2017-03-29 19:40:51 +03:00
parent 4ab9e569d1
commit 3fa3a96d3a
3 changed files with 13 additions and 3 deletions

View File

@ -34,7 +34,8 @@ impl Deserialize for Unparsed {
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
let len = VarUint32::deserialize(reader)?.into();
let vec = vec![0u8; len];
let mut vec = vec![0u8; len];
reader.read_exact(&mut vec[..])?;
Ok(Unparsed(vec))
}
}

View File

@ -10,6 +10,10 @@ pub struct Module {
impl Module {
pub fn version(&self) -> u32 { self.version }
pub fn sections(&self) -> &[Section] {
&self.sections
}
}
impl Deserialize for Module {
@ -19,6 +23,7 @@ impl Deserialize for Module {
let mut sections = Vec::new();
let magic = Uint32::deserialize(reader)?;
let version = Uint32::deserialize(reader)?;
loop {
@ -58,5 +63,6 @@ mod integration_tests {
let module = Module::deserialize(&mut reader).expect("Should be deserialized");
assert_eq!(module.version(), 1);
assert_eq!(module.sections().len(), 8);
}
}

View File

@ -10,9 +10,12 @@ impl Deserialize for Section {
type Error = Error;
fn deserialize<R: io::Read>(reader: &mut R) -> Result<Self, Self::Error> {
let id = VarUint7::deserialize(reader)?;
let id = match VarUint7::deserialize(reader) {
// todo: be more selective detecting no more section
Err(_) => { return Err(Error::UnexpectedEof); },
Ok(id) => id,
};
let unparsed = Unparsed::deserialize(reader)?;
Ok(Section {
id: id.0,
unparsed: unparsed,