pub struct WireReserves {
pub whole: usize,
pub chunk: usize,
pub min_chunk_data: usize,
}Expand description
The bytes the transport adds around a payload on the wire, per framing path. Bundled as a named
value so the framing rule reads reserves.plan(len, limit) instead of a row of positional
usizes, and so the production reserves live in exactly one place (WireReserves::PRODUCTION).
Fields§
§whole: usizeBytes added around a whole payload — the outer TransportMessage::Custom frame.
chunk: usizeBytes added around each chunk’s data — its MessagePayload envelope and the outer
TransportMessage::Custom frame.
min_chunk_data: usizeSmallest per-chunk data payload worth producing; a limit that cannot fit chunk + min_chunk_data is rejected rather than fragmented into near-empty chunks.
Implementations§
Source§impl WireReserves
impl WireReserves
Sourcepub const PRODUCTION: Self
pub const PRODUCTION: Self
The reserves used in production, derived from the transport/message ceilings.
Sourcepub fn plan(
&self,
payload_len: usize,
max_message_size: usize,
) -> Option<Framing>
pub fn plan( &self, payload_len: usize, max_message_size: usize, ) -> Option<Framing>
Frame a payload_len-byte payload for a connection whose negotiated per-message limit is
max_message_size. The decision is taken against the wire bytes (payload + reserves), not
the bare payload, and is a pure total function:
plan : (len, limit) ↦ Whole if len + whole ≤ limit
↦ Chunked(limit − chunk) if limit ≥ chunk + min_chunk_data
↦ ∅ otherwise∅ (None) means the peer’s limit is too small for even one useful chunk — a failure the
caller surfaces, never a flood of 1-byte chunks. When Chunked { chunk_size } is returned,
min_chunk_data ≤ chunk_size and chunk_size + chunk ≤ limit, so every wrapped chunk fits
and a payload yields at most ⌈len / min_chunk_data⌉ chunks. Every sum is checked, so the
function is total over all usize inputs (no overflow/underflow).
Trait Implementations§
Source§impl Clone for WireReserves
impl Clone for WireReserves
Source§fn clone(&self) -> WireReserves
fn clone(&self) -> WireReserves
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for WireReserves
Source§impl Debug for WireReserves
impl Debug for WireReserves
impl Eq for WireReserves
Source§impl PartialEq for WireReserves
impl PartialEq for WireReserves
Source§fn eq(&self, other: &WireReserves) -> bool
fn eq(&self, other: &WireReserves) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for WireReserves
Auto Trait Implementations§
impl Freeze for WireReserves
impl RefUnwindSafe for WireReserves
impl Send for WireReserves
impl Sync for WireReserves
impl Unpin for WireReserves
impl UnsafeUnpin for WireReserves
impl UnwindSafe for WireReserves
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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>
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>
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 moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.