Skip to main content

SpdyInput

Struct SpdyInput 

Source
pub(crate) struct SpdyInput {
    stdin: Option<StreamReceiver>,
    peer_closed: Arc<AtomicBool>,
    resize: Option<StreamReceiver>,
    resize_events: ResizeEvents,
    connection: Option<Connection>,
    pub(super) done: CancellationToken,
}
Expand description

The input of a SPDY client: the stdin stream, whose end closes stdin, and the resize stream, which carries consecutive JSON objects. Clients open a resize stream only with a terminal, which the server does not know for an attach, so it may also come after the session started. Both get read together: once the stdin which the process does not read fills PENDING_STDIN_MAX_BYTES of the session, the resizes wait as well.

Fields§

§stdin: Option<StreamReceiver>§peer_closed: Arc<AtomicBool>

Set once the client closed its stdin cleanly, so that the output, which fails once the connection ended, does not end the session before the stdin got forwarded, see Output. The end of the connection is a clean close then, which still forwards the stdin the client sent before.

§resize: Option<StreamReceiver>§resize_events: ResizeEvents§connection: Option<Connection>

The connection, for the streams which come after the start, see SpdyInput::late_stream.

§done: CancellationToken

Cancelled once the connection ended.

Implementations§

Source§

impl SpdyInput

Source

fn late_stream(&mut self, stream: Stream)

Take a stream which comes after the start: the resize stream, and output streams the session does not use, which end right away, like stderr which clients open for a terminal without asking for one. Others get reset. Nothing gets awaited, the caller may cancel ClientInput::next.

Trait Implementations§

Source§

impl ClientInput for SpdyInput

Source§

async fn next(&mut self) -> Option<ClientEvent>

The next event, None once the client went away without a clean close.
Source§

fn answer_close(&mut self) -> impl Future<Output = ()> + Send

Answer the clean close of the client, see web::answer_close.
Source§

fn drain(self, output: Output) -> impl Future<Output = ()> + Send
where Self: Sized,

End the connection once output closed it after ClientEvent::TooLarge, see web::drain.

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<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
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self> ⓘ

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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.

§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more