use core::ffi::c_void;
#[doc(hidden)]
#[repr(C)]
#[derive(Clone, Copy)]
pub struct EzffiSlice {
ptr: *mut c_void,
len: usize,
}
impl<E> ::ezffi::RustRefIntoC<()> for [E] {
type C = EzffiSlice;
unsafe fn ref_into_c(&self) -> EzffiSlice {
EzffiSlice {
ptr: self.as_ptr() as *mut c_void,
len: self.len(),
}
}
}
impl<E> ::ezffi::CRefIntoRust<[E]> for EzffiSlice {
unsafe fn into_rust(&self) -> &[E] {
if self.ptr.is_null() {
return &[];
}
unsafe { core::slice::from_raw_parts(self.ptr as *const E, self.len) }
}
unsafe fn into_rust_mut(&mut self) -> &mut [E] {
if self.ptr.is_null() {
return &mut [];
}
unsafe { core::slice::from_raw_parts_mut(self.ptr as *mut E, self.len) }
}
}