1 use crate::marker::PhantomData;
4 use libc::{iovec, c_void};
7 pub struct IoSlice<'a> {
9 _p: PhantomData<&'a [u8]>,
12 impl<'a> IoSlice<'a> {
14 pub fn new(buf: &'a [u8]) -> IoSlice<'a> {
17 iov_base: buf.as_ptr() as *mut u8 as *mut c_void,
25 pub fn as_slice(&self) -> &[u8] {
27 slice::from_raw_parts(self.vec.iov_base as *mut u8, self.vec.iov_len)
32 pub struct IoSliceMut<'a> {
34 _p: PhantomData<&'a mut [u8]>,
37 impl<'a> IoSliceMut<'a> {
39 pub fn new(buf: &'a mut [u8]) -> IoSliceMut<'a> {
42 iov_base: buf.as_mut_ptr() as *mut c_void,
50 pub fn as_slice(&self) -> &[u8] {
52 slice::from_raw_parts(self.vec.iov_base as *mut u8, self.vec.iov_len)
57 pub fn as_mut_slice(&mut self) -> &mut [u8] {
59 slice::from_raw_parts_mut(self.vec.iov_base as *mut u8, self.vec.iov_len)