diff --git a/lib/api/src/js/jsobjectresolver.rs b/lib/api/src/js/js_import_object.rs similarity index 62% rename from lib/api/src/js/jsobjectresolver.rs rename to lib/api/src/js/js_import_object.rs index 6b1708f53..43a010694 100644 --- a/lib/api/src/js/jsobjectresolver.rs +++ b/lib/api/src/js/js_import_object.rs @@ -1,38 +1,26 @@ use crate::js::{Export, ExternType, Module, NamedResolver}; use std::collections::HashMap; -/// All of the import data used when instantiating. -/// -/// It's suggested that you use the [`imports!`] macro -/// instead of creating an `ImportObject` by hand. -/// -/// [`imports!`]: macro.imports.html -/// -/// # Usage: -/// ```ignore -/// use wasmer::{Exports, ImportObject, Function}; -/// -/// let mut import_object = ImportObject::new(); -/// let mut env = Exports::new(); -/// -/// env.insert("foo", Function::new_native(foo)); -/// import_object.register("env", env); -/// -/// fn foo(n: i32) -> i32 { -/// n -/// } -/// ``` +/// This struct is used in case you want to create an `Instance` +/// of a `Module` with imports that are provided directly from +/// Javascript with a JS Object. #[derive(Clone, Default)] -pub struct JSObjectResolver { +pub struct JsImportObject { module_imports: HashMap<(String, String), ExternType>, object: js_sys::Object, } -unsafe impl Send for JSObjectResolver {} -unsafe impl Sync for JSObjectResolver {} +unsafe impl Send for JsImportObject {} +unsafe impl Sync for JsImportObject {} -impl JSObjectResolver { - /// Create a new `ImportObject`. +impl JsImportObject { + /// Create a new `JsImportObject`. + /// + /// # Usage + /// ```ignore + /// # use wasmer::JsImportObject; + /// let import_object = JsImportObject::new(&module, js_object); + /// ``` pub fn new(module: &Module, object: js_sys::Object) -> Self { let module_imports = module .imports() @@ -53,8 +41,8 @@ impl JSObjectResolver { /// /// # Usage /// ```ignore - /// # use wasmer::{ImportObject, Instance, Namespace}; - /// let mut import_object = ImportObject::new(); + /// # use wasmer::JsImportObject; + /// let import_object = JsImportObject::new(&module, js_object); /// import_object.get_export("module", "name"); /// ``` pub fn get_export(&self, module: &str, name: &str) -> Option { @@ -70,13 +58,13 @@ impl JSObjectResolver { } } -impl Into for JSObjectResolver { +impl Into for JsImportObject { fn into(self) -> js_sys::Object { self.object } } -impl NamedResolver for JSObjectResolver { +impl NamedResolver for JsImportObject { fn resolve_by_name(&self, module: &str, name: &str) -> Option { self.get_export(module, name) } diff --git a/lib/api/src/js/mod.rs b/lib/api/src/js/mod.rs index ae27e8337..6acaefc4f 100644 --- a/lib/api/src/js/mod.rs +++ b/lib/api/src/js/mod.rs @@ -31,7 +31,7 @@ mod exports; mod externals; mod import_object; mod instance; -mod jsobjectresolver; +mod js_import_object; mod module; #[cfg(feature = "wasm-types-polyfill")] mod module_info_polyfill; @@ -59,7 +59,7 @@ pub use crate::js::externals::{ }; pub use crate::js::import_object::{ImportObject, ImportObjectIterator, LikeNamespace}; pub use crate::js::instance::{Instance, InstantiationError}; -pub use crate::js::jsobjectresolver::JSObjectResolver; +pub use crate::js::js_import_object::JsImportObject; pub use crate::js::module::{Module, ModuleTypeHints}; pub use crate::js::native::NativeFunc; pub use crate::js::ptr::{Array, Item, WasmPtr};