pub struct Endpoint { /* private fields */ }
Expand description

Represents a network endpoint. This is for duplex connection mocking. Each direction has a separate ringbuffer and one buffer’s readhalf is connected to the other buffer’s writehalf in order to simulate a duplex connection.

The main way to create this is to call Endpoint::pair which returns a tuple of endpoints, and which let’s you specify the buffer size for each direction.

Endpoint implements AsyncRead/AsyncWrite so you can feed it to interfaces that need those combined in a single type.

By setting the buffer size precisely, one can simulate back pressure. Endpoint will return Pending on writes when full and on reads when empty.

When calling close on an endpoint, any further writes on that endpoint will return std::io::ErrorKind::NotConnected and any reads on the other endpoint will continue to empty the buffer and then return Ok(0). Ok(0) means no new data will ever appear, unless you passed in a zero sized buffer.

If the remote endpoint is pending on a read, the task will be woken up when calling close or dropping this endpoint.

Implementations§

source§

impl Endpoint

source

pub fn pair(a_buf: usize, b_buf: usize) -> (Endpoint, Endpoint)

Create a pair of endpoints, specifying the buffer size for each one. The buffer size corresponds to the buffer the respective endpoint writes to. The other will read from this one.

Trait Implementations§

source§

impl AsyncRead for Endpoint

source§

fn poll_read( self: Pin<&mut Self>, cx: &mut Context<'_>, buf: &mut [u8] ) -> Poll<Result<usize>>

Attempt to read from the AsyncRead into buf. Read more
§

fn poll_read_vectored( self: Pin<&mut Self>, cx: &mut Context<'_>, bufs: &mut [IoSliceMut<'_>] ) -> Poll<Result<usize, Error>>

Attempt to read from the AsyncRead into bufs using vectored IO operations. Read more
source§

impl AsyncWrite for Endpoint

source§

fn poll_write( self: Pin<&mut Self>, cx: &mut Context<'_>, buf: &[u8] ) -> Poll<Result<usize>>

Attempt to write bytes from buf into the object. Read more
source§

fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>

Attempt to flush the object, ensuring that any buffered data reach their destination. Read more
source§

fn poll_close(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>

Attempt to close the object. Read more
§

fn poll_write_vectored( self: Pin<&mut Self>, cx: &mut Context<'_>, bufs: &[IoSlice<'_>] ) -> Poll<Result<usize, Error>>

Attempt to write bytes from bufs into the object using vectored IO operations. Read more
source§

impl Debug for Endpoint

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Drop for Endpoint

Makes sure that the reader of the other end is notified (woken up if pending) of the connection closure.

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<R> AsyncReadExt for Rwhere R: AsyncRead + ?Sized,

§

fn chain<R>(self, next: R) -> Chain<Self, R>where Self: Sized, R: AsyncRead,

Creates an adaptor which will chain this stream with another. Read more
§

fn read<'a>(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self>where Self: Unpin,

Tries to read some bytes directly into the given 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,

Creates a future which will read from the 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,

Creates a future which will read exactly enough bytes to fill 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,

Creates a future which will read all the bytes from this AsyncRead. Read more
§

fn read_to_string<'a>( &'a mut self, buf: &'a mut String ) -> ReadToString<'a, Self>where Self: Unpin,

Creates a future which will read all the bytes from this AsyncRead. Read more
§

fn split(self) -> (ReadHalf<Self>, WriteHalf<Self>)where Self: AsyncWrite + Sized,

Helper method for splitting this read/write object into two halves. Read more
§

fn take(self, limit: u64) -> Take<Self>where Self: Sized,

Creates an AsyncRead adapter which will read at most limit bytes from the underlying reader. Read more
§

impl<W> AsyncWriteExt for Wwhere W: AsyncWrite + ?Sized,

§

fn flush(&mut self) -> Flush<'_, Self>where Self: Unpin,

Creates a future which will entirely flush this AsyncWrite. Read more
§

fn close(&mut self) -> Close<'_, Self>where Self: Unpin,

Creates a future which will entirely close this AsyncWrite.
§

fn write<'a>(&'a mut self, buf: &'a [u8]) -> Write<'a, Self>where Self: Unpin,

Creates a future which will write bytes from buf into the object. Read more
§

fn write_vectored<'a>( &'a mut self, bufs: &'a [IoSlice<'a>] ) -> WriteVectored<'a, Self>where Self: Unpin,

Creates a future which will write bytes from bufs into the object using vectored IO operations. Read more
§

fn write_all<'a>(&'a mut self, buf: &'a [u8]) -> WriteAll<'a, Self>where Self: Unpin,

Write data into this object. Read more
§

fn into_sink<Item>(self) -> IntoSink<Self, Item>where Item: AsRef<[u8]>, Self: Sized,

Allow using an [AsyncWrite] as a Sink<Item: AsRef<[u8]>>. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V