Skip to main content

Resume

Enum Resume 

Source
pub enum Resume {
    Replay {
        frames: Vec<SseEvent>,
        last: EventId,
    },
    Live {
        last: EventId,
    },
    Gap {
        notice: SseEvent,
        evicted_through: EventId,
        resume_from: EventId,
        last: EventId,
    },
    Refused(Refusal),
}
Expand description

What to do with a stream a client has asked to resume.

Four arms, and the first three are all ways of keeping the stream open. The fourth is not: it means no stream is opened at all, and the client is answered with an error it can branch on. A caller that treated it as a fourth way of staying open would have invented a response the client never receives.

Variants§

§

Replay

Write these frames, then continue the live stream.

The frames are the complete answer: everything after the client’s cursor is in here, and every one of them carries its own id: so the client’s next reconnect has a cursor to quote.

Fields

§frames: Vec<SseEvent>

The frames to write, oldest first.

§last: EventId

The newest event the stream has ever issued.

§

Live

Write nothing, and hold the stream open.

Not a close, and not a keep-alive comment: a client must not be able to mistake an empty write for an event, and the comment form dispatches nothing so a client would learn of no error — but a client that asked to resume and is already current has lost nothing, so the honest answer is silence until something real happens.

Fields

§last: EventId

The newest event the stream has ever issued.

§

Gap

Write notice, then continue the live stream.

The client is behind by more than the ring retains. It has lost events and cannot get them back, and this is how it finds out. See the module docs for why the notice carries no id:.

Fields

§notice: SseEvent

The control frame to write before going live.

§evicted_through: EventId

The newest event the ring has dropped. Everything at or before this is gone.

§resume_from: EventId

The cursor that yields a complete answer on a retry.

§last: EventId

The newest event the stream has ever issued.

§

Refused(Refusal)

A refusal. Reuses Refusal so the status code and the JSON-RPC body come from the one place that defines them.

Implementations§

Source§

impl Resume

Source

pub fn pending(&self) -> &[SseEvent]

The frames to write before switching to the live stream.

The write loop’s whole job: write these, then go live. Empty for Live and Refused, one frame for Gap, and the whole window for Replay.

Note that a refusal is [] and the writer must not open the stream for it, which is why this is not enough on its own to drive the response — a caller matches on the arm to get the status.

Source

pub const fn last(&self) -> Option<EventId>

The newest event id the stream has issued, when the decision has one.

None only for a refusal, which is not a stream at all. Useful for a log line or a metric, both of which want the watermark whether the client got a replay, an open stream, or a notice.

Trait Implementations§

Source§

impl Clone for Resume

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 Debug for Resume

Source§

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

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

impl Eq for Resume

Source§

impl PartialEq for Resume

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for Resume

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

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

Source§

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

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> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

Source§

impl<T> Instrument for T

Source§

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

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

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.

Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

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

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

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

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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

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

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