(
callback: wasmtime_func_async_callback_t,
data: *mut c_void,
finalizer: Option<extern "C" fn(*mut std::ffi::c_void)>,
)
| 161 | } |
| 162 | |
| 163 | unsafe fn c_async_callback_to_rust_fn( |
| 164 | callback: wasmtime_func_async_callback_t, |
| 165 | data: *mut c_void, |
| 166 | finalizer: Option<extern "C" fn(*mut std::ffi::c_void)>, |
| 167 | ) -> impl for<'a> Fn( |
| 168 | WasmtimeCaller<'a>, |
| 169 | &'a [Val], |
| 170 | &'a mut [Val], |
| 171 | ) -> Box<dyn Future<Output = Result<()>> + Send + 'a> |
| 172 | + Send |
| 173 | + Sync |
| 174 | + 'static { |
| 175 | let foreign = crate::ForeignData { data, finalizer }; |
| 176 | move |caller, params, results| { |
| 177 | let _ = &foreign; // move entire foreign into this closure |
| 178 | let data = CallbackDataPtr { ptr: foreign.data }; |
| 179 | Box::new(invoke_c_async_callback( |
| 180 | callback, data, caller, params, results, |
| 181 | )) |
| 182 | } |
| 183 | } |
| 184 | |
| 185 | #[repr(transparent)] |
| 186 | pub struct wasmtime_call_future_t<'a> { |
no test coverage detected