54 lines
2.0 KiB
Rust
54 lines
2.0 KiB
Rust
use crate::dynamic_data::{EmptyScriptResolver, ScriptResolver};
|
|
use crate::ffi::{IdentifiablePointer, OwnedPtr};
|
|
use std::ptr::drop_in_place;
|
|
|
|
/// Instantiates a basic empty script resolver, that always returns None.
|
|
#[no_mangle]
|
|
extern "C" fn empty_script_resolver_new() -> IdentifiablePointer<Box<dyn ScriptResolver>> {
|
|
let v: Box<dyn ScriptResolver> = Box::new(EmptyScriptResolver {
|
|
identifier: Default::default(),
|
|
});
|
|
let id = v.value_identifier();
|
|
let ptr = Box::into_raw(Box::new(v));
|
|
IdentifiablePointer::new(ptr, id)
|
|
}
|
|
|
|
/// Drops a script resolver.
|
|
#[no_mangle]
|
|
extern "C" fn script_resolver_drop(ptr: OwnedPtr<Box<dyn ScriptResolver>>) {
|
|
unsafe { drop_in_place(ptr) };
|
|
}
|
|
|
|
/// Foreign function interfaces for the Webassembly script resolver.
|
|
#[cfg(feature = "wasm")]
|
|
mod web_assembly_script_resolver {
|
|
use crate::dynamic_data::ScriptResolver;
|
|
use crate::ffi::{ExternPointer, IdentifiablePointer};
|
|
use crate::script_implementations::wasm::script_resolver::WebAssemblyScriptResolver;
|
|
|
|
/// Instantiates a new WebAssemblyScriptResolver.
|
|
#[no_mangle]
|
|
extern "C" fn webassembly_script_resolver_new() -> IdentifiablePointer<Box<dyn ScriptResolver>> {
|
|
let v: Box<dyn ScriptResolver> = WebAssemblyScriptResolver::new();
|
|
let id = v.value_identifier();
|
|
let ptr = Box::into_raw(Box::new(v));
|
|
IdentifiablePointer::new(ptr, id)
|
|
}
|
|
|
|
/// Load a compiled WASM module.
|
|
#[no_mangle]
|
|
extern "C" fn webassembly_script_resolver_load_wasm_from_bytes(
|
|
mut ptr: ExternPointer<Box<WebAssemblyScriptResolver>>,
|
|
arr: *const u8,
|
|
len: usize,
|
|
) {
|
|
unsafe { ptr.as_mut().load_wasm_from_bytes(std::slice::from_raw_parts(arr, len)) }
|
|
}
|
|
|
|
/// Tells the script resolver we're done loading wasm modules, and to finalize the resolver.
|
|
#[no_mangle]
|
|
extern "C" fn webassembly_script_resolver_finalize(mut ptr: ExternPointer<Box<WebAssemblyScriptResolver>>) {
|
|
ptr.as_mut().finalize();
|
|
}
|
|
}
|