diff --git a/examples/info.rs b/examples/info.rs index c692c20..5ab2b35 100644 --- a/examples/info.rs +++ b/examples/info.rs @@ -1,7 +1,7 @@ extern crate parity_wasm; use std::env; -use parity_wasm::Section; +use parity_wasm::elements::Section; fn main() { let args = env::args().collect::>(); diff --git a/src/elements/func.rs b/src/elements/func.rs index ec02dfd..c080e92 100644 --- a/src/elements/func.rs +++ b/src/elements/func.rs @@ -1,6 +1,16 @@ use std::io; use super::{Deserialize, Error, ValueType, VarUint32, CountedList, Opcodes}; +/// Function signature (type reference) +pub struct Func(u32); + +impl Func { + pub fn new(type_ref: u32) -> Self { Func(type_ref) } + + pub fn type_ref(&self) -> u32 { + self.0 + } +} pub struct Local { count: u32, diff --git a/src/elements/mod.rs b/src/elements/mod.rs index 7e77bfd..988a6ae 100644 --- a/src/elements/mod.rs +++ b/src/elements/mod.rs @@ -19,7 +19,7 @@ pub use self::global_entry::GlobalEntry; pub use self::primitives::{VarUint32, VarUint7, VarUint1, VarInt7, Uint32, Uint64, VarUint64, CountedList}; pub use self::types::{ValueType, BlockType}; pub use self::ops::{Opcode, Opcodes, InitExpr}; -pub use self::func::{FuncBody, Local}; +pub use self::func::{Func, FuncBody, Local}; pub use self::segment::{ElementSegment, DataSegment}; pub trait Deserialize : Sized { @@ -27,6 +27,11 @@ pub trait Deserialize : Sized { fn deserialize(reader: &mut R) -> Result; } +pub trait Serialize { + type Error; + fn serialize(&self, writer: &mut W) -> Result<(), Self::Error>; +} + #[derive(Debug)] pub enum Error { UnexpectedEof, diff --git a/src/elements/section.rs b/src/elements/section.rs index 0ba19c6..47e1470 100644 --- a/src/elements/section.rs +++ b/src/elements/section.rs @@ -11,6 +11,7 @@ use super::{ TableType, ExportEntry, GlobalEntry, + Func, FuncBody, ElementSegment, DataSegment, @@ -132,19 +133,10 @@ impl Deserialize for ImportSection { } } -/// Function signature (type reference) -pub struct Function(pub u32); - -impl Function { - pub fn type_ref(&self) -> u32 { - self.0 - } -} - -pub struct FunctionsSection(Vec); +pub struct FunctionsSection(Vec); impl FunctionsSection { - pub fn entries(&self) -> &[Function] { + pub fn entries(&self) -> &[Func] { &self.0 } } @@ -155,13 +147,13 @@ impl Deserialize for FunctionsSection { fn deserialize(reader: &mut R) -> Result { // todo: maybe use reader.take(section_length) let _section_length = VarUint32::deserialize(reader)?; - let funcs: Vec = CountedList::::deserialize(reader)? + let funcs: Vec = CountedList::::deserialize(reader)? .into_inner() .into_iter() - .map(|f| Function(f.into())) + .map(|f| Func::new(f.into())) .collect(); Ok(FunctionsSection(funcs)) - } + } } pub struct TableSection(Vec); diff --git a/src/lib.rs b/src/lib.rs index 91d1a58..f8d9720 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,11 +1,9 @@ extern crate byteorder; -mod elements; +pub mod elements; pub use elements::{ - Section, - Module, - Error as DeserializeError, + Error as SerializationError, deserialize_buffer, deserialize_file };