From e667ae4554e816b4081d874fc3564b07c28dbec6 Mon Sep 17 00:00:00 2001 From: Henry Date: Sun, 19 Apr 2026 17:48:32 +0200 Subject: feat: simplify module api Signed-off-by: Henry --- crates/parser/src/lib.rs | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) (limited to 'crates/parser/src/lib.rs') diff --git a/crates/parser/src/lib.rs b/crates/parser/src/lib.rs index 0b5af2e..7b3dfa2 100644 --- a/crates/parser/src/lib.rs +++ b/crates/parser/src/lib.rs @@ -39,7 +39,7 @@ pub use error::*; use module::ModuleReader; use wasmparser::{Validator, WasmFeatures}; -pub use tinywasm_types::TinyWasmModule; +pub use tinywasm_types::Module; /// Parser optimization and lowering options. #[non_exhaustive] @@ -113,8 +113,8 @@ impl Parser { Validator::new_with_features(features) } - /// Parse a [`TinyWasmModule`] from bytes - pub fn parse_module_bytes(&self, wasm: impl AsRef<[u8]>) -> Result { + /// Parse a [`Module`] from bytes + pub fn parse_module_bytes(&self, wasm: impl AsRef<[u8]>) -> Result { let wasm = wasm.as_ref(); let mut validator = Self::create_validator(self.options.clone()); let mut reader = ModuleReader::default(); @@ -131,16 +131,16 @@ impl Parser { } #[cfg(feature = "std")] - /// Parse a [`TinyWasmModule`] from a file. Requires `std` feature. - pub fn parse_module_file(&self, path: impl AsRef + Clone) -> Result { + /// Parse a [`Module`] from a file. Requires `std` feature. + pub fn parse_module_file(&self, path: impl AsRef + Clone) -> Result { let file = crate::std::fs::File::open(&path) .map_err(|e| ParseError::Other(alloc::format!("Error opening file {:?}: {}", path.as_ref(), e)))?; self.parse_module_stream(&mut crate::std::io::BufReader::new(file)) } #[cfg(feature = "std")] - /// Parse a [`TinyWasmModule`] from a stream. Requires `std` feature. - pub fn parse_module_stream(&self, mut stream: impl std::io::Read) -> Result { + /// Parse a [`Module`] from a stream. Requires `std` feature. + pub fn parse_module_stream(&self, mut stream: impl std::io::Read) -> Result { let mut validator = Self::create_validator(self.options.clone()); let mut reader = ModuleReader::default(); let mut buffer = alloc::vec::Vec::new(); @@ -170,10 +170,30 @@ impl Parser { } } -impl TryFrom for TinyWasmModule { +impl TryFrom for Module { type Error = ParseError; fn try_from(reader: ModuleReader) -> Result { reader.into_module(&ParserOptions::default()) } } + +/// Parse a module from bytes +pub fn parse_bytes(wasm: &[u8]) -> Result { + let data = Parser::new().parse_module_bytes(wasm)?; + Ok(data) +} + +#[cfg(feature = "std")] +/// Parse a module from a file. Requires the `std` feature. +pub fn parse_file(path: impl AsRef + Clone) -> Result { + let data = Parser::new().parse_module_file(path)?; + Ok(data) +} + +#[cfg(feature = "std")] +/// Parse a module from a stream. Requires `parser` and `std` features. +pub fn parse_stream(stream: impl crate::std::io::Read) -> Result { + let data = Parser::new().parse_module_stream(stream)?; + Ok(data) +} -- cgit v1.3.1