buffex 0.0.1

BUFFer EXtensions: ring buffer and buffer chaining.
Documentation
use abs_buff::{TrBuffPeeker, TrBuffReader, TrBuffWriter};

pub trait TrAsyncRingBuffer<T: Clone = u8> {
    type Writer<'a>: 'a + TrAsyncRingBuffWriter<T, RingBuffer = Self>
    where
        Self: 'a;

    type Reader<'a>: 'a + TrAsyncRingBuffReader<T, RingBuffer = Self>
    where
        Self: 'a;

    fn capacity(&self) -> usize;

    fn data_size(&self) -> usize;

    fn writer(&mut self) -> Self::Writer<'_>;

    fn reader(&mut self) -> Self::Reader<'_>;
}

pub trait TrAsyncRingBuffPeeker<T: Clone = u8>
where
    Self: TrBuffPeeker<T>
        + core::borrow::Borrow<Self::RingBuffer>
        + core::convert::AsMut<Self::Reader>,
{
    type RingBuffer: TrAsyncRingBuffer<T>;
    type Reader: TrAsyncRingBuffReader<T>;

    fn try_peek(&mut self, skip: usize) -> Result<
        <Self as TrBuffPeeker<T>>::BuffRef<'_>,
        <Self as TrBuffPeeker<T>>::Error,
    >;
}

pub trait TrAsyncRingBuffReader<T: Clone = u8>
where
    Self: TrBuffReader<T>
        + core::borrow::Borrow<Self::RingBuffer>
        + core::convert::AsMut<Self::Peeker>,
{
    type RingBuffer: TrAsyncRingBuffer<T>;
    type Peeker: TrAsyncRingBuffPeeker<T>;

    fn try_read(&mut self, length: usize) -> Result<
        <Self as TrBuffReader<T>>::BuffRef<'_>,
        <Self as TrBuffReader<T>>::Error,
    >;
}

pub trait TrAsyncRingBuffWriter<T: Clone = u8>
where
    Self: TrBuffWriter<T>
        + core::borrow::Borrow<Self::RingBuffer>,
{
    type RingBuffer: TrAsyncRingBuffer<T>;

    fn try_write(&mut self, length: usize) -> Result<
        <Self as TrBuffWriter<T>>::BuffMut<'_>,
        <Self as TrBuffWriter<T>>::Error,
    >;
}