Skip to main content

SubscriptionEventLoopState

Struct SubscriptionEventLoopState 

Source
pub struct SubscriptionEventLoopState<T, R, S> { /* private fields */ }
Expand description

The state machine for the subscription event loop.

This is made generic and removed from the subscription event loop to make it possible for users to implement their own event loop that doesn’t depend on the Session, which can allow for several useful features that we are unlikely to implement in the Session itself, such as:

  • Backpressure, letting users replace the publish implementation with one that waits for the consumer to be ready before passing the publish response to the event loop.
  • Custom subscription caches, for example for persisting subscription state.

Implementations§

Source§

impl<T: Future<Output = Result<bool, StatusCode>>, R: Fn() -> T, S: SubscriptionCache> SubscriptionEventLoopState<T, R, S>

Source

pub fn new( session_id: u32, trigger_publish_recv: Receiver<Instant>, publish_limits_rx: Receiver<PublishLimits>, publish_source: R, subscription_cache: S, ) -> Self

Construct a new subscription cache.

§Arguments
  • session_id - The session id for logging purposes.
  • trigger_publish_recv - A channel used to transmit external publish triggers. This is used to trigger publish outside of the normal schedule, for example when a new subscription is created.
  • publish_limits_rx - A channel used to receive updates to publish limits.
  • publish_source - A function that produces a future that performs a publish operation.
  • subscription_cache - An implementation of the SubscriptionCache trait.
Source

pub async fn iter_loop(&mut self) -> SubscriptionActivity

Run an iteration of the event loop, returning each time a publish message is received.

Auto Trait Implementations§

§

impl<T, R, S> !Freeze for SubscriptionEventLoopState<T, R, S>

§

impl<T, R, S> !RefUnwindSafe for SubscriptionEventLoopState<T, R, S>

§

impl<T, R, S> Send for SubscriptionEventLoopState<T, R, S>
where R: Send, S: Send, T: Send,

§

impl<T, R, S> Sync for SubscriptionEventLoopState<T, R, S>
where R: Sync, S: Sync, T: Send + Sync,

§

impl<T, R, S> Unpin for SubscriptionEventLoopState<T, R, S>
where R: Unpin, S: Unpin,

§

impl<T, R, S> UnsafeUnpin for SubscriptionEventLoopState<T, R, S>
where R: UnsafeUnpin, S: UnsafeUnpin,

§

impl<T, R, S> !UnwindSafe for SubscriptionEventLoopState<T, R, S>

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<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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