use super::super::{
externals::wasm_extern_t, module::wasm_module_t, types::wasm_name_t, wasi::wasi_env_t,
};
#[allow(non_camel_case_types)]
#[derive(Clone)]
pub struct wasmer_named_extern_t {
module: wasm_name_t,
name: wasm_name_t,
r#extern: Box<wasm_extern_t>,
}
wasm_declare_boxed_vec!(named_extern, wasmer);
#[doc(hidden)]
#[cfg(__cbindgen_hack__ = "yes")]
mod __cbindgen_hack__ {
use super::*;
#[repr(C)]
pub struct wasmer_named_extern_vec_t {
pub size: usize,
pub data: *mut *mut wasmer_named_extern_t,
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn wasmer_named_extern_vec_new(
out: *mut wasmer_named_extern_vec_t,
length: usize,
init: *const *mut wasmer_named_extern_t,
) {
unimplemented!()
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn wasmer_named_extern_vec_new_uninitialized(
out: *mut wasmer_named_extern_vec_t,
length: usize,
) {
unimplemented!()
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn wasmer_named_extern_vec_copy(
out_ptr: &mut wasmer_named_extern_vec_t,
in_ptr: &wasmer_named_extern_vec_t,
) {
unimplemented!()
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn wasmer_named_extern_vec_delete(
ptr: Option<&mut wasmer_named_extern_vec_t>,
) {
unimplemented!()
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn wasmer_named_extern_vec_new_empty(
out: *mut wasmer_named_extern_vec_t,
) {
unimplemented!()
}
}
#[unsafe(no_mangle)]
pub extern "C" fn wasmer_named_extern_module(
named_extern: Option<&wasmer_named_extern_t>,
) -> Option<&wasm_name_t> {
Some(&named_extern?.module)
}
#[unsafe(no_mangle)]
pub extern "C" fn wasmer_named_extern_name(
named_extern: Option<&wasmer_named_extern_t>,
) -> Option<&wasm_name_t> {
Some(&named_extern?.name)
}
#[unsafe(no_mangle)]
pub extern "C" fn wasmer_named_extern_unwrap(
named_extern: Option<&wasmer_named_extern_t>,
) -> Option<&wasm_extern_t> {
Some(named_extern?.r#extern.as_ref())
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn wasi_get_unordered_imports(
wasi_env: Option<&mut wasi_env_t>,
module: Option<&wasm_module_t>,
imports: &mut wasmer_named_extern_vec_t,
) -> bool {
unsafe { wasi_get_unordered_imports_inner(wasi_env, module, imports) }.is_some()
}
unsafe fn wasi_get_unordered_imports_inner(
wasi_env: Option<&mut wasi_env_t>,
module: Option<&wasm_module_t>,
imports: &mut wasmer_named_extern_vec_t,
) -> Option<()> {
let wasi_env = wasi_env?;
let store = &mut wasi_env.store;
let module = module?;
let import_object = {
let mut store_mut = unsafe { store.store_mut() };
c_try!(wasi_env.inner.import_object(&mut store_mut, &module.inner))
};
imports.set_buffer(
import_object
.into_iter()
.map(move |((module, name), extern_)| {
let module = module.into();
let name = name.into();
Some(Box::new(wasmer_named_extern_t {
module,
name,
r#extern: Box::new(wasm_extern_t::new(store.clone(), extern_)),
}))
})
.collect::<Vec<_>>(),
);
Some(())
}