From 871398ff821255debdbd9452e46ca55a05e8cb92 Mon Sep 17 00:00:00 2001 From: Henry Gressmann Date: Fri, 1 Dec 2023 14:00:46 +0100 Subject: feat: wip: seperate parser and types crates Signed-off-by: Henry Gressmann --- crates/parser/src/lib.rs | 73 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 crates/parser/src/lib.rs (limited to 'crates/parser/src/lib.rs') diff --git a/crates/parser/src/lib.rs b/crates/parser/src/lib.rs new file mode 100644 index 0000000..39bb1c6 --- /dev/null +++ b/crates/parser/src/lib.rs @@ -0,0 +1,73 @@ +#![no_std] +#![forbid(unsafe_code)] +#![cfg_attr(not(feature = "std"), feature(error_in_core))] + +extern crate alloc; +#[cfg(feature = "std")] +extern crate std; + +mod conversion; +mod error; +mod module; +use alloc::boxed::Box; +pub use error::*; +use module::ModuleReader; +use tinywasm_types::{Export, FuncType, Function}; + +pub struct Parser {} + +impl Parser { + pub fn parse_module_bytes(wasm: &[u8]) -> Result { + let reader = ModuleReader::new(); + reader.try_into() + } + + pub fn parse_module_file(file_name: &str) -> Result { + let reader = ModuleReader::new(); + reader.try_into() + } + + #[cfg(feature = "std")] + pub fn parse_module_stream(stream: impl std::io::Read) -> Result { + let reader = ModuleReader::new(); + reader.try_into() + } + + pub fn read_module_bytes(bytes: &[u8]) -> Result { + unimplemented!() + } + pub fn read_module_file(file_name: &str) -> Result { + unimplemented!() + } + #[cfg(feature = "std")] + pub fn read_module_stream(stream: impl std::io::Read) -> Result { + unimplemented!() + } +} + +pub struct TinyWasmModule { + pub version: Option, + pub start_func: Option, + + pub types: Option>, + pub funcs: Option>, + pub exports: Option>, + // pub tables: Option, + // pub memories: Option, + // pub globals: Option, + // pub elements: Option>, + // pub imports: Option>, + // pub data_segments: Option>, +} + +impl TryFrom> for TinyWasmModule { + type Error = ParseError; + + fn try_from(reader: ModuleReader<'_>) -> Result { + if !reader.end_reached { + return Err(ParseError::EndNotReached); + } + + unimplemented!() + } +} -- cgit v1.3.1