Struct futures_ringbuf::RingBuffer
source · pub struct RingBuffer<T: Sized + Copy> { /* private fields */ }
Expand description
A RingBuffer that implements AsyncRead
and AsyncWrite
from the futures library.
This object is rather special in that it’s read and writes are connected to a single
ringbuffer. It’s good for low level unit tests for (eg. framing a connection with a
codec) and verifying that a codec writes the correct data, but it does not mock a full
network connection. Subtle things can go wrong, like when using AsyncRead::split
and
dropping the WriteHalf
, the ReadHalf
cannot detect that and the task won’t be woken up.
If you want to mock a network connection, use Endpoint.
Implementations§
Trait Implementations§
source§impl AsyncRead for RingBuffer<u8>
impl AsyncRead for RingBuffer<u8>
source§fn poll_read(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
dst: &mut [u8]
) -> Poll<Result<usize, Error>>
fn poll_read( self: Pin<&mut Self>, cx: &mut Context<'_>, dst: &mut [u8] ) -> Poll<Result<usize, Error>>
Will return Poll::Pending when the buffer is empty. Will be woken up by the AsyncWrite impl when new data is written or the writer is closed.
When the buffer (for network simulation) is closed and empty, or if you pass in a 0 byte buffer,
this will return Poll::Ready( Ok(0) )
.
This method is infallible.
source§impl AsyncWrite for RingBuffer<u8>
impl AsyncWrite for RingBuffer<u8>
source§fn poll_write(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
src: &[u8]
) -> Poll<Result<usize, Error>>
fn poll_write( self: Pin<&mut Self>, cx: &mut Context<'_>, src: &[u8] ) -> Poll<Result<usize, Error>>
Will return Poll::Pending when the buffer is full. AsyncRead impl will wake up this task
when new place is made.
This method returns a io::ErrorKind::NotConnected
error if called after poll_close
.
source§fn poll_flush(
self: Pin<&mut Self>,
_cx: &mut Context<'_>
) -> Poll<Result<(), Error>>
fn poll_flush( self: Pin<&mut Self>, _cx: &mut Context<'_> ) -> Poll<Result<(), Error>>
We are always flushed, this is a noop. This method is infallible.
The compiler cannot verify that the producer/consumer are from the same RingBuffer
object.
Obviously if you abuse this things won’t work as expected.
I added this so you can seed a buffer before passing it to futures_ringbuf.
source§fn from(buffer: (HeapProducer<T>, HeapConsumer<T>)) -> Self
fn from(buffer: (HeapProducer<T>, HeapConsumer<T>)) -> Self
source§fn from(buffer: SyncRingBuffer<T>) -> Self
fn from(buffer: SyncRingBuffer<T>) -> Self
Auto Trait Implementations§
impl<T> RefUnwindSafe for RingBuffer<T>where T: RefUnwindSafe,
impl<T> Send for RingBuffer<T>where T: Send,
impl<T> Sync for RingBuffer<T>where T: Send + Sync,
impl<T> Unpin for RingBuffer<T>where T: Unpin,
impl<T> UnwindSafe for RingBuffer<T>where T: UnwindSafe + RefUnwindSafe,
Blanket Implementations§
§impl<R> AsyncReadExt for Rwhere
R: AsyncRead + ?Sized,
impl<R> AsyncReadExt for Rwhere R: AsyncRead + ?Sized,
§fn chain<R>(self, next: R) -> Chain<Self, R>where
Self: Sized,
R: AsyncRead,
fn chain<R>(self, next: R) -> Chain<Self, R>where Self: Sized, R: AsyncRead,
§fn read<'a>(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self>where
Self: Unpin,
fn read<'a>(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self>where Self: Unpin,
buf
in asynchronous
manner, returning a future type. Read more§fn read_vectored<'a>(
&'a mut self,
bufs: &'a mut [IoSliceMut<'a>]
) -> ReadVectored<'a, Self>where
Self: Unpin,
fn read_vectored<'a>( &'a mut self, bufs: &'a mut [IoSliceMut<'a>] ) -> ReadVectored<'a, Self>where Self: Unpin,
AsyncRead
into bufs
using vectored
IO operations. Read more§fn read_exact<'a>(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self>where
Self: Unpin,
fn read_exact<'a>(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self>where Self: Unpin,
buf
,
returning an error if end of file (EOF) is hit sooner. Read more§fn read_to_end<'a>(
&'a mut self,
buf: &'a mut Vec<u8, Global>
) -> ReadToEnd<'a, Self>where
Self: Unpin,
fn read_to_end<'a>( &'a mut self, buf: &'a mut Vec<u8, Global> ) -> ReadToEnd<'a, Self>where Self: Unpin,
AsyncRead
. Read more§fn read_to_string<'a>(
&'a mut self,
buf: &'a mut String
) -> ReadToString<'a, Self>where
Self: Unpin,
fn read_to_string<'a>( &'a mut self, buf: &'a mut String ) -> ReadToString<'a, Self>where Self: Unpin,
AsyncRead
. Read more§impl<W> AsyncWriteExt for Wwhere
W: AsyncWrite + ?Sized,
impl<W> AsyncWriteExt for Wwhere W: AsyncWrite + ?Sized,
§fn flush(&mut self) -> Flush<'_, Self>where
Self: Unpin,
fn flush(&mut self) -> Flush<'_, Self>where Self: Unpin,
AsyncWrite
. Read more§fn close(&mut self) -> Close<'_, Self>where
Self: Unpin,
fn close(&mut self) -> Close<'_, Self>where Self: Unpin,
AsyncWrite
.§fn write<'a>(&'a mut self, buf: &'a [u8]) -> Write<'a, Self>where
Self: Unpin,
fn write<'a>(&'a mut self, buf: &'a [u8]) -> Write<'a, Self>where Self: Unpin,
buf
into the object. Read more§fn write_vectored<'a>(
&'a mut self,
bufs: &'a [IoSlice<'a>]
) -> WriteVectored<'a, Self>where
Self: Unpin,
fn write_vectored<'a>( &'a mut self, bufs: &'a [IoSlice<'a>] ) -> WriteVectored<'a, Self>where Self: Unpin,
bufs
into the object using vectored
IO operations. Read more