Trait compio_buf::IoVectoredBuf

source ·
pub trait IoVectoredBuf: Sized + 'static {
    // Required methods
    fn as_dyn_bufs(&self) -> impl Iterator<Item = &dyn IoBuf>;
    fn owned_iter(
        self,
    ) -> Result<OwnedIter<impl OwnedIterator<Inner = Self>>, Self>;

    // Provided method
    unsafe fn as_io_slices(&self) -> Vec<IoSlice> { ... }
}
Expand description

A trait for vectored buffers.

Required Methods§

source

fn as_dyn_bufs(&self) -> impl Iterator<Item = &dyn IoBuf>

Iterate the inner buffers.

source

fn owned_iter(self) -> Result<OwnedIter<impl OwnedIterator<Inner = Self>>, Self>

Create an owned iterator to make it easy to pass this vectored buffer as a regular buffer.

use compio_buf::{IoBuf, IoVectoredBuf};

let bufs = [vec![1u8, 2], vec![3, 4]];
let iter = bufs.owned_iter().unwrap();
assert_eq!(iter.as_slice(), &[1, 2]);
let iter = iter.next().unwrap();
assert_eq!(iter.as_slice(), &[3, 4]);
let iter = iter.next();
assert!(iter.is_err());

The time complexity of the returned iterator depends on the implementation of Iterator::nth of IoVectoredBuf::as_dyn_bufs.

Provided Methods§

source

unsafe fn as_io_slices(&self) -> Vec<IoSlice>

An iterator for the IoSlices of the buffers.

§Safety

The return slice will not live longer than self. It is static to provide convenience from writing self-referenced structure.

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl<T: IoBuf> IoVectoredBuf for &'static [T]

source§

fn as_dyn_bufs(&self) -> impl Iterator<Item = &dyn IoBuf>

source§

fn owned_iter(self) -> Result<OwnedIter<impl OwnedIterator<Inner = Self>>, Self>

source§

impl<T: IoBuf> IoVectoredBuf for &'static mut [T]

source§

fn as_dyn_bufs(&self) -> impl Iterator<Item = &dyn IoBuf>

source§

fn owned_iter(self) -> Result<OwnedIter<impl OwnedIterator<Inner = Self>>, Self>

source§

impl<T: IoBuf, A: Allocator + 'static> IoVectoredBuf for Vec<T, A>

source§

fn as_dyn_bufs(&self) -> impl Iterator<Item = &dyn IoBuf>

source§

fn owned_iter(self) -> Result<OwnedIter<impl OwnedIterator<Inner = Self>>, Self>

source§

impl<T: IoBuf, const N: usize> IoVectoredBuf for [T; N]

source§

fn as_dyn_bufs(&self) -> impl Iterator<Item = &dyn IoBuf>

source§

fn owned_iter(self) -> Result<OwnedIter<impl OwnedIterator<Inner = Self>>, Self>

source§

impl<T: IoBuf, const N: usize> IoVectoredBuf for ArrayVec<T, N>

Available on crate feature arrayvec only.
source§

fn as_dyn_bufs(&self) -> impl Iterator<Item = &dyn IoBuf>

source§

fn owned_iter(self) -> Result<OwnedIter<impl OwnedIterator<Inner = Self>>, Self>

source§

impl<T: IoVectoredBuf + IoIndexedBuf> IoVectoredBuf for &'static T

source§

fn as_dyn_bufs(&self) -> impl Iterator<Item = &dyn IoBuf>

source§

fn owned_iter(self) -> Result<OwnedIter<impl OwnedIterator<Inner = Self>>, Self>

source§

impl<T: IoVectoredBuf + IoIndexedBuf> IoVectoredBuf for &'static mut T

source§

fn as_dyn_bufs(&self) -> impl Iterator<Item = &dyn IoBuf>

source§

fn owned_iter(self) -> Result<OwnedIter<impl OwnedIterator<Inner = Self>>, Self>

Implementors§