PkmnLib_rs/src/ffi/dynamic_data/libraries/script_resolver.rs

60 lines
2.1 KiB
Rust
Raw Normal View History

2022-10-14 08:33:19 +00:00
use crate::dynamic_data::{EmptyScriptResolver, ScriptResolver};
use crate::ffi::{IdentifiablePointer, OwnedPtr};
use std::ptr::drop_in_place;
2022-10-14 08:33:19 +00:00
2022-10-14 14:53:30 +00:00
/// Instantiates a basic empty script resolver, that always returns None.
2022-10-14 08:33:19 +00:00
#[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) };
}
2022-10-14 14:53:30 +00:00
/// Foreign function interfaces for the Webassembly script resolver.
2022-10-14 08:33:19 +00:00
#[cfg(feature = "wasm")]
mod web_assembly_script_resolver {
use crate::dynamic_data::ScriptResolver;
2023-04-23 08:10:06 +00:00
use crate::ffi::{ExternPointer, IdentifiablePointer, NativeResult};
2022-10-14 08:33:19 +00:00
use crate::script_implementations::wasm::script_resolver::WebAssemblyScriptResolver;
2022-10-14 14:53:30 +00:00
/// Instantiates a new WebAssemblyScriptResolver.
2022-10-14 08:33:19 +00:00
#[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)
}
2022-10-14 14:53:30 +00:00
/// Load a compiled WASM module.
2022-10-14 08:33:19 +00:00
#[no_mangle]
extern "C" fn webassembly_script_resolver_load_wasm_from_bytes(
2022-10-14 14:53:30 +00:00
mut ptr: ExternPointer<Box<WebAssemblyScriptResolver>>,
2022-10-14 08:33:19 +00:00
arr: *const u8,
len: usize,
2023-04-23 08:10:06 +00:00
) -> NativeResult<()> {
unsafe {
ptr.as_mut()
.load_wasm_from_bytes(std::slice::from_raw_parts(arr, len))
.into()
}
2022-10-14 08:33:19 +00:00
}
2022-10-14 14:53:30 +00:00
/// Tells the script resolver we're done loading wasm modules, and to finalize the resolver.
2022-10-14 08:33:19 +00:00
#[no_mangle]
2023-04-23 08:10:06 +00:00
extern "C" fn webassembly_script_resolver_finalize(
mut ptr: ExternPointer<Box<WebAssemblyScriptResolver>>,
) -> NativeResult<()> {
ptr.as_mut().finalize().into()
2022-10-14 08:33:19 +00:00
}
}