PkmnLib_rs/src/script_implementations/wasm/export_registry/dynamic_data/party.rs

32 lines
1.0 KiB
Rust
Executable File

use crate::dynamic_data::{Pokemon, PokemonParty};
use crate::script_implementations::wasm::export_registry::register;
use crate::script_implementations::wasm::export_registry::wasm_result::{get_value, wasm_ok, WasmResult};
use crate::script_implementations::wasm::extern_ref::ExternRef;
use crate::script_implementations::wasm::script_resolver::WebAssemblyEnv;
use anyhow_ext::Context;
use wasmer::FunctionEnvMut;
register! {
fn party_get_pokemon(
env: FunctionEnvMut<WebAssemblyEnv>,
party: ExternRef<PokemonParty>,
index: u32
) -> WasmResult<ExternRef<Pokemon>> {
let party = get_value!(party, env);
wasm_ok(
if let Some(Some(v)) = &party.pokemon().get(index as usize) {
ExternRef::func_new(&env, v.as_ref())
} else {
ExternRef::null()
})
}
fn party_get_length(
env: FunctionEnvMut<WebAssemblyEnv>,
party: ExternRef<PokemonParty>,
) -> WasmResult<u32> {
let party = get_value!(party, env);
wasm_ok(party.length() as u32)
}
}