Get any exported extern value by name. ## Example ```rust # fn main() -> tinywasm::Result<()> { # use tinywasm::{ExternItem, ModuleInstance, Store}; # let wasm = wat::parse_str(r#" # (module # (global (export "answer") i32 (i32.const 42))) # "#).expect("valid wat"); # let module = tinywasm::parse_bytes(&wasm)?; # let mut store = Store::default(); let instance = ModuleInstance::instantia
(&self, name: &str)
| 371 | /// # } |
| 372 | /// ``` |
| 373 | pub fn extern_item(&self, name: &str) -> Result<ExternItem> { |
| 374 | match self.require_export(name)? { |
| 375 | ExternVal::Func(addr) => { |
| 376 | let export = self.0.exports.iter().find(|e| e.name == name.into()); |
| 377 | let export = export.ok_or_else(|| Error::Other(format!("Export not found: {name}")))?; |
| 378 | Ok(ExternItem::Func(Function { |
| 379 | item: crate::StoreItem::new(self.0.store_id, addr), |
| 380 | module_addr: self.id(), |
| 381 | addr, |
| 382 | ty: self.func_type_by_type_index(self.func_type_idx(export.index)).clone(), |
| 383 | })) |
| 384 | } |
| 385 | ExternVal::Memory(addr) => Ok(ExternItem::Memory(Memory::from_store_addr(self.0.store_id, addr))), |
| 386 | ExternVal::Table(addr) => Ok(ExternItem::Table(Table::from_store_addr(self.0.store_id, addr))), |
| 387 | ExternVal::Global(addr) => Ok(ExternItem::Global(Global::from_store_addr(self.0.store_id, addr))), |
| 388 | } |
| 389 | } |
| 390 | |
| 391 | /// Get a function export by name. |
| 392 | /// |
nothing calls this directly
no test coverage detected