Struct MemoryDatagramSocket
pub struct MemoryDatagramSocket { /* private fields */ }Available on crate feature
std and crate feature udp and (crate features test-utils) only.Expand description
One endpoint of an in-memory datagram pair used by protocol tests.
Sending from either endpoint queues a datagram for the other. The fixed queue capacity models backpressure without using an operating-system socket.
Implementations§
§impl MemoryDatagramSocket
impl MemoryDatagramSocket
pub fn pair(
first: impl Into<SocketAddress>,
second: impl Into<SocketAddress>,
capacity: NonZero<usize>,
) -> (MemoryDatagramSocket, MemoryDatagramSocket)
pub fn pair( first: impl Into<SocketAddress>, second: impl Into<SocketAddress>, capacity: NonZero<usize>, ) -> (MemoryDatagramSocket, MemoryDatagramSocket)
Construct two connected endpoints with capacity datagrams per side.
pub fn inject_received(
&self,
payload: Vec<u8>,
metadata: DatagramMetadata,
) -> Result<(), DatagramError>
pub fn inject_received( &self, payload: Vec<u8>, metadata: DatagramMetadata, ) -> Result<(), DatagramError>
Insert a datagram directly into this endpoint’s receive queue.
This is useful for deterministic tests of metadata that cannot be produced by the ordinary paired send path, such as original destination.
pub fn set_max_send_segments(&self, value: NonZero<usize>)
pub fn set_max_send_segments(&self, value: NonZero<usize>)
Change the segmented-send limit exposed by both endpoints.
This deterministic hook lets protocol tests model a backend that lowers its offload limit after a runtime rejection. Already-created sender handles observe the new value through their next capability query.
Trait Implementations§
§impl DatagramSocket for MemoryDatagramSocket
impl DatagramSocket for MemoryDatagramSocket
§type Sender = MemoryDatagramSender
type Sender = MemoryDatagramSender
Independently wakeable send handle created by this socket.
§fn create_sender(&self) -> <MemoryDatagramSocket as DatagramSocket>::Sender
fn create_sender(&self) -> <MemoryDatagramSocket as DatagramSocket>::Sender
Create a send handle with independent readiness registration. Read more
§fn poll_recv(
&mut self,
cx: &mut Context<'_>,
buffers: &mut [IoSliceMut<'_>],
metadata: &mut [DatagramMetadata],
) -> Poll<Result<usize, DatagramError>>
fn poll_recv( &mut self, cx: &mut Context<'_>, buffers: &mut [IoSliceMut<'_>], metadata: &mut [DatagramMetadata], ) -> Poll<Result<usize, DatagramError>>
Receive one or more datagrams, or register for readiness. Read more
§fn capabilities(&self) -> DatagramCapabilities
fn capabilities(&self) -> DatagramCapabilities
Current runtime-detected capabilities.
§impl Debug for MemoryDatagramSocket
impl Debug for MemoryDatagramSocket
§impl Drop for MemoryDatagramSocket
impl Drop for MemoryDatagramSocket
§impl Socket for MemoryDatagramSocket
impl Socket for MemoryDatagramSocket
§fn local_addr(&self) -> Result<SocketAddress, Error>
fn local_addr(&self) -> Result<SocketAddress, Error>
Try to get the local address of the socket.
§fn peer_addr(&self) -> Result<SocketAddress, Error>
fn peer_addr(&self) -> Result<SocketAddress, Error>
Try to get the remote address of the socket.
Auto Trait Implementations§
impl !RefUnwindSafe for MemoryDatagramSocket
impl !UnwindSafe for MemoryDatagramSocket
impl Freeze for MemoryDatagramSocket
impl Send for MemoryDatagramSocket
impl Sync for MemoryDatagramSocket
impl Unpin for MemoryDatagramSocket
impl UnsafeUnpin for MemoryDatagramSocket
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
§impl<T> DatagramSocketExt for Twhere
T: DatagramSocket + ?Sized,
impl<T> DatagramSocketExt for Twhere
T: DatagramSocket + ?Sized,
§fn recv<'a>(
&'a mut self,
buffer: &'a mut [u8],
) -> impl Future<Output = Result<DatagramMetadata, DatagramError>> + Send + 'awhere
Self: Sized,
fn recv<'a>(
&'a mut self,
buffer: &'a mut [u8],
) -> impl Future<Output = Result<DatagramMetadata, DatagramError>> + Send + 'awhere
Self: Sized,
Receive one datagram into
buffer.§fn recv_batch<'a, 'buffer>(
&'a mut self,
buffers: &'a mut [IoSliceMut<'buffer>],
metadata: &'a mut [DatagramMetadata],
) -> impl Future<Output = Result<usize, DatagramError>> + Send + 'awhere
'buffer: 'a,
Self: Sized,
fn recv_batch<'a, 'buffer>(
&'a mut self,
buffers: &'a mut [IoSliceMut<'buffer>],
metadata: &'a mut [DatagramMetadata],
) -> impl Future<Output = Result<usize, DatagramError>> + Send + 'awhere
'buffer: 'a,
Self: Sized,
Receive one or more datagrams into parallel buffer and metadata slices.
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a rama_grpc::Request§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§fn and<P, B, E>(self, other: P) -> And<T, P>
fn and<P, B, E>(self, other: P) -> And<T, P>
Create a new
Policy that returns Action::Follow only if self and other return
Action::Follow. Read more