use super::wasmtime_component_val_t; use crate::{WasmtimeStoreContextMut, wasmtime_component_func_type_t, wasmtime_error_t}; use wasmtime::component::{Func, Val}; #[unsafe(no_mangle)] pub unsafe extern "C" fn wasmtime_component_func_call( func: &Func, mut context: WasmtimeStoreContextMut<'_>, args: *const wasmtime_component_val_t, args_len: usize, results: *mut wasmtime_component_val_t, results_len: usize, ) -> Option> { let c_args = unsafe { crate::slice_from_raw_parts(args, args_len) }; let c_results = unsafe { crate::slice_from_raw_parts_mut(results, results_len) }; let args = c_args.iter().map(Val::from).collect::>(); let mut results = vec![Val::Bool(false); results_len]; let result = func.call(&mut context, &args, &mut results); crate::handle_result(result, |_| { for (c_val, rust_val) in std::iter::zip(c_results, results) { *c_val = wasmtime_component_val_t::from(&rust_val); } }) } #[deprecated(note = "no longer has any effect")] #[unsafe(no_mangle)] pub unsafe extern "C" fn wasmtime_component_func_post_return( _func: &Func, _context: WasmtimeStoreContextMut<'_>, ) -> Option> { None } #[unsafe(no_mangle)] pub extern "C" fn wasmtime_component_func_type( func: &Func, context: WasmtimeStoreContextMut<'_>, ) -> Box { Box::new(func.ty(context).into()) }