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> { let v: Box = 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>) { 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> { let v: Box = 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>, 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>) { ptr.as_mut().finalize(); } }