diff options
| author | Henry Gressmann <mail@henrygressmann.de> | 2023-12-01 14:00:46 +0100 |
|---|---|---|
| committer | Henry Gressmann <mail@henrygressmann.de> | 2023-12-01 14:00:46 +0100 |
| commit | 871398ff821255debdbd9452e46ca55a05e8cb92 (patch) | |
| tree | bac4777cf6123ff3640f4377fa33091b68d02d91 /crates/parser/src/lib.rs | |
| parent | 266afb16777970b37a61889039a0a2ea1ad1f83a (diff) | |
feat: wip: seperate parser and types crates
Signed-off-by: Henry Gressmann <mail@henrygressmann.de>
Diffstat (limited to 'crates/parser/src/lib.rs')
| -rw-r--r-- | crates/parser/src/lib.rs | 73 |
1 files changed, 73 insertions, 0 deletions
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<TinyWasmModule> { + let reader = ModuleReader::new(); + reader.try_into() + } + + pub fn parse_module_file(file_name: &str) -> Result<TinyWasmModule> { + let reader = ModuleReader::new(); + reader.try_into() + } + + #[cfg(feature = "std")] + pub fn parse_module_stream(stream: impl std::io::Read) -> Result<TinyWasmModule> { + let reader = ModuleReader::new(); + reader.try_into() + } + + pub fn read_module_bytes(bytes: &[u8]) -> Result<TinyWasmModule> { + unimplemented!() + } + pub fn read_module_file(file_name: &str) -> Result<TinyWasmModule> { + unimplemented!() + } + #[cfg(feature = "std")] + pub fn read_module_stream(stream: impl std::io::Read) -> Result<TinyWasmModule> { + unimplemented!() + } +} + +pub struct TinyWasmModule { + pub version: Option<u16>, + pub start_func: Option<u32>, + + pub types: Option<Box<[FuncType]>>, + pub funcs: Option<Box<[Function]>>, + pub exports: Option<Box<[Export]>>, + // pub tables: Option<TableType>, + // pub memories: Option<MemoryType>, + // pub globals: Option<GlobalType>, + // pub elements: Option<ElementSectionReader<'a>>, + // pub imports: Option<ImportSectionReader<'a>>, + // pub data_segments: Option<DataSectionReader<'a>>, +} + +impl TryFrom<ModuleReader<'_>> for TinyWasmModule { + type Error = ParseError; + + fn try_from(reader: ModuleReader<'_>) -> Result<Self> { + if !reader.end_reached { + return Err(ParseError::EndNotReached); + } + + unimplemented!() + } +} |
