pub struct Subscription { /* private fields */ }Expand description
Handle representing an active listener or middleware registration.
Returned by the subscribe_* and add_*middleware* methods on
EventBus. The listener remains registered as long as the bus is
running — dropping a Subscription does not unsubscribe it.
To automatically unsubscribe when a scope exits, convert this into a
SubscriptionGuard with into_guard.
§Cloning
Subscription is Clone. All clones refer to the same underlying
registration; calling unsubscribe on any clone
removes the listener.
Implementations§
Source§impl Subscription
impl Subscription
Sourcepub const fn id(&self) -> SubscriptionId
pub const fn id(&self) -> SubscriptionId
Return the unique SubscriptionId for this registration.
The id can be passed to EventBus::unsubscribe to remove the
listener without consuming this handle.
Sourcepub const fn name(&self) -> Option<&'static str>
pub const fn name(&self) -> Option<&'static str>
Return the listener name, if one was provided by the handler.
Named handlers expose their name through this getter, making it
possible to identify a subscription without querying
EventBus::stats. Middleware subscriptions always return None.
Sourcepub async fn unsubscribe(self) -> Result<bool, EventBusError>
pub async fn unsubscribe(self) -> Result<bool, EventBusError>
Remove this listener from the bus.
Returns Ok(true) if the listener was found and removed, Ok(false) if
it was already removed, or Err if the bus has shut down.
Sourcepub fn into_guard(self) -> SubscriptionGuard
pub fn into_guard(self) -> SubscriptionGuard
Convert this subscription into a guard that automatically unsubscribes when dropped.
The guard sends a fire-and-forget unsubscribe message in its Drop
impl, so no .await is needed. If the bus has already shut down the
message is silently discarded.
§Examples
use jaeb::{EventBus, SyncEventHandler, HandlerResult};
#[derive(Clone)]
struct Evt;
struct H;
impl SyncEventHandler<Evt> for H {
fn handle(&self, _: &Evt) -> HandlerResult { Ok(()) }
}
let bus = EventBus::builder().buffer_size(64).build().await.expect("valid config");
{
let _guard = bus.subscribe::<Evt, _, _>(H).await.unwrap().into_guard();
// listener is active inside this scope
}
// guard dropped → listener automatically unsubscribed
bus.shutdown().await.unwrap();Trait Implementations§
Source§impl Clone for Subscription
impl Clone for Subscription
Source§fn clone(&self) -> Subscription
fn clone(&self) -> Subscription
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more