use alloc::boxed::Box; use alloc::vec::Vec; use core::mem; #[repr(C)] pub struct FFIArray { ptr: *mut T, len: usize, } impl FFIArray { pub fn new(v: &[T]) -> Self { let boxed_slice: Box<&[T]> = Box::new(v); let r = Self { ptr: boxed_slice.as_ptr() as *mut T, len: boxed_slice.len(), }; mem::forget(boxed_slice); r } fn delete(&self) { unsafe { drop(Vec::from_raw_parts(self.ptr, self.len, self.len)); } } pub(crate) fn ptr(&self) -> *mut T { self.ptr } pub(crate) fn len(&self) -> usize { self.len } } #[no_mangle] #[cfg(not(feature = "mock_data"))] extern "wasm" fn delete_ffi_array(a: FFIArray) { a.delete() }