Skip to main content

ConsumerHandle

Struct ConsumerHandle 

Source
pub struct ConsumerHandle { /* private fields */ }
Expand description

Opaque handle that enforces per-consumer quotas on a shared Station.

Obtain via Station::register_consumer. The handle is Send + Sync and may be wrapped in an Arc for sharing across tasks.

§Drop semantics

Dropping the ConsumerHandle drops the Vec<MultiplexRef> held internally. Each MultiplexRef::drop calls release_consumer on the underlying station, decrementing the per-SeriesKey refcount. When the last holder drops, the multiplexer shuts down — same path as dropping a SubscriptionHandle.

This is fully synchronous: MultiplexRef::drop performs only a fetch_sub + optional oneshot::send, both non-blocking.

Implementations§

Source§

impl ConsumerHandle

Source

pub async fn active_sub_count(&self) -> u32

Number of currently active subscriptions held by this consumer.

Source

pub async fn rest_tokens_available(&self) -> u32

REST tokens available in the current window (without consuming). Returns u32::MAX when no REST quota is configured.

Source

pub async fn subscribe( &self, set: SubscriptionSet, ) -> Result<SubscribeReport, QuotaError>

Subscribe with quota enforcement.

Pre-flight checks (whitelist, cap) run before any acquire_or_spawn call. If either fails, no subscriptions are made and an error is returned immediately.

If a stream fails mid-batch (StreamNotSupported), any refs acquired so far in this batch are rolled back via release_consumer before returning Err. The consumer’s active-sub counter never sees a partial increment.

The returned SubscribeReport’s handle still works for recv() — the multiplex broadcast keeps emitting as long as any consumer holds a ref. The underlying MultiplexRefs are moved into this ConsumerHandle, so dropping the ConsumerHandle releases ALL refs even if the caller still holds the SubscriptionHandle for event recv.

Source

pub async fn rest_gate(&self) -> Result<Station, QuotaError>

Consume one REST token and return a Station view.

The caller uses the returned Station to call REST methods (e.g. hub().get_klines(...)). This token-handoff design avoids ~75 LOC of forwarding boilerplate and is immune to future additions of REST methods.

Returns Err(QuotaError::RestRateLimit { remaining_ms }) when the token bucket is empty.

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