Path: blob/main/crates/c-api/src/component/func.rs
1692 views
use wasmtime::component::{Func, Val};12use crate::{WasmtimeStoreContextMut, wasmtime_error_t};34use super::wasmtime_component_val_t;56#[unsafe(no_mangle)]7pub unsafe extern "C" fn wasmtime_component_func_call(8func: &Func,9mut context: WasmtimeStoreContextMut<'_>,10args: *const wasmtime_component_val_t,11args_len: usize,12results: *mut wasmtime_component_val_t,13results_len: usize,14) -> Option<Box<wasmtime_error_t>> {15let c_args = unsafe { std::slice::from_raw_parts(args, args_len) };16let c_results = unsafe { std::slice::from_raw_parts_mut(results, results_len) };1718let args = c_args.iter().map(Val::from).collect::<Vec<_>>();19let mut results = vec![Val::Bool(false); results_len];2021let result = func.call(&mut context, &args, &mut results);2223crate::handle_result(result, |_| {24for (c_val, rust_val) in std::iter::zip(c_results, results) {25*c_val = wasmtime_component_val_t::from(&rust_val);26}27})28}2930#[unsafe(no_mangle)]31pub unsafe extern "C" fn wasmtime_component_func_post_return(32func: &Func,33mut context: WasmtimeStoreContextMut<'_>,34) -> Option<Box<wasmtime_error_t>> {35let result = func.post_return(&mut context);3637crate::handle_result(result, |_| {})38}394041