Path: blob/main/crates/c-api/src/component/func.rs
3069 views
use super::wasmtime_component_val_t;1use crate::{WasmtimeStoreContextMut, wasmtime_component_func_type_t, wasmtime_error_t};2use wasmtime::component::{Func, Val};34#[unsafe(no_mangle)]5pub unsafe extern "C" fn wasmtime_component_func_call(6func: &Func,7mut context: WasmtimeStoreContextMut<'_>,8args: *const wasmtime_component_val_t,9args_len: usize,10results: *mut wasmtime_component_val_t,11results_len: usize,12) -> Option<Box<wasmtime_error_t>> {13let c_args = unsafe { crate::slice_from_raw_parts(args, args_len) };14let c_results = unsafe { crate::slice_from_raw_parts_mut(results, results_len) };1516let args = c_args.iter().map(Val::from).collect::<Vec<_>>();17let mut results = vec![Val::Bool(false); results_len];1819let result = func.call(&mut context, &args, &mut results);2021crate::handle_result(result, |_| {22for (c_val, rust_val) in std::iter::zip(c_results, results) {23*c_val = wasmtime_component_val_t::from(&rust_val);24}25})26}2728#[deprecated(note = "no longer has any effect")]29#[unsafe(no_mangle)]30pub unsafe extern "C" fn wasmtime_component_func_post_return(31_func: &Func,32_context: WasmtimeStoreContextMut<'_>,33) -> Option<Box<wasmtime_error_t>> {34None35}3637#[unsafe(no_mangle)]38pub extern "C" fn wasmtime_component_func_type(39func: &Func,40context: WasmtimeStoreContextMut<'_>,41) -> Box<wasmtime_component_func_type_t> {42Box::new(func.ty(context).into())43}444546