pub struct PushSubscription { /* private fields */ }Expand description
A push-based subscription handle.
Receives ChangeEvents as they are pushed by the Ring 1 dispatcher.
Dropping this handle automatically cancels the subscription in the
SubscriptionRegistry.
Works naturally with tokio::select! and while let:
tokio::select! {
event = sub.recv() => handle(event),
_ = shutdown.recv() => break,
}Implementations§
Source§impl PushSubscription
impl PushSubscription
Sourcepub fn new(
id: SubscriptionId,
receiver: Receiver<ChangeEvent>,
registry: Arc<SubscriptionRegistry>,
query: String,
) -> Self
pub fn new( id: SubscriptionId, receiver: Receiver<ChangeEvent>, registry: Arc<SubscriptionRegistry>, query: String, ) -> Self
Creates a new push subscription.
This is pub(crate) — external callers create subscriptions via the
pipeline or engine API, which resolves the query to a source_id and
registers in the SubscriptionRegistry.
Sourcepub async fn recv(&mut self) -> Result<ChangeEvent, PushSubscriptionError>
pub async fn recv(&mut self) -> Result<ChangeEvent, PushSubscriptionError>
Receives the next change event.
Awaits until an event is available or the subscription is closed.
§Errors
PushSubscriptionError::Cancelledif the subscription was cancelled.PushSubscriptionError::Laggedifnevents were missed due to slow consumption. The receiver skips ahead and subsequentrecv()calls return newer events.PushSubscriptionError::Closedif all senders have been dropped.
Sourcepub fn try_recv(&mut self) -> Option<Result<ChangeEvent, PushSubscriptionError>>
pub fn try_recv(&mut self) -> Option<Result<ChangeEvent, PushSubscriptionError>>
Tries to receive without blocking.
Returns None if no event is immediately available.
Returns Some(Err(...)) on lagged, closed, or cancelled.
Sourcepub fn pause(&self) -> bool
pub fn pause(&self) -> bool
Pauses the subscription.
While paused, events are either buffered or dropped depending on the
backpressure configuration. Returns true if the subscription was
active and is now paused.
Sourcepub fn resume(&self) -> bool
pub fn resume(&self) -> bool
Resumes a paused subscription.
Returns true if the subscription was paused and is now active.
Sourcepub fn cancel(&mut self)
pub fn cancel(&mut self)
Cancels the subscription.
After cancellation, recv() returns PushSubscriptionError::Cancelled.
The subscription is removed from the registry.
Sourcepub fn id(&self) -> SubscriptionId
pub fn id(&self) -> SubscriptionId
Returns the subscription ID.
Sourcepub fn is_cancelled(&self) -> bool
pub fn is_cancelled(&self) -> bool
Returns true if the subscription has been cancelled.
Sourcepub fn metrics(&self) -> Option<SubscriptionMetrics>
pub fn metrics(&self) -> Option<SubscriptionMetrics>
Returns subscription metrics from the registry.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for PushSubscription
impl !RefUnwindSafe for PushSubscription
impl Send for PushSubscription
impl Sync for PushSubscription
impl Unpin for PushSubscription
impl !UnwindSafe for PushSubscription
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.