Skip to main content

H2WritableStateTarget

Enum H2WritableStateTarget 

Source
pub enum H2WritableStateTarget {
    Done(MuxResult),
    Flush,
    WriteStreams,
}
Expand description

What ConnectionH2::dispatch_writable_state wants its caller to do with the (H2State, Position) arm it just took.

The connection-level write pass’s own protocol, built the way H2FinalizeTarget builds the stream-level one: the core answers a step, the shell performs the socket work, and the core is told what the socket then said. Self::Flush carries NO answer with it — the post-flush query can only enter the core through ConnectionH2::dispatch_writable_state_after_flush’s own parameter, which is what stops “does rustls hold records” and “did the kernel take them” from ever being read off one binding. h2_close::TlsFlushPhase states why those are two questions and what conflating them costs.

Not H2FinalizeTarget reused. That enum’s SkipFlush answers a question no close arm asks: nothing writes to the socket between this dispatch and its flush, so no vectored write can have attempted it as a side effect, and sharing the enum would force a named-impossible arm into the shell’s match. It is the argument h2_close already makes against widening CloseAction with FinalizeAction’s readiness answers, applied the other way round.

Variants§

§

Done(MuxResult)

The arm ended the pass by itself: this is the pass’s result. Every arm but the two below answers this, the H2State::GoAway arm’s departed-peer and nothing-pending answers included.

§

Flush

The H2State::GoAway arm asks for the second flush of this pass: perform H2Shell::flush_tls_records, read H2Shell::tls_wants_write again, and answer with ConnectionH2::dispatch_writable_state_after_flush.

The preamble already attempted one flush this pass; this one re-checks because a close is about to be decided on the answer. Both are deliberate — see h2_close’s module doc.

§

WriteStreams

A proxying state: run H2Shell::write_streams, whose result is the pass’s. It is the caller’s to run for the same reason the flush is, and it is why the dispatch takes neither Context nor Endpoint.

Trait Implementations§

Source§

impl Clone for H2WritableStateTarget

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for H2WritableStateTarget

Source§

impl Debug for H2WritableStateTarget

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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 T
where 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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

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

Source§

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.