pub struct SharedSubscriber<Destination>{ /* private fields */ }Expand description
§SharedSubscriber
This should be the very first thing you reach for when you want to share a subscriber between multiple places. Where each place with a clone of this can be sure to send signals to the exact same destination.
§Deadlock Protection
While Subscriber and other traits are implemented on plain Arc<Mutex<D>>s
too, and those too have uses of their own, this struct here features
deadlock protection in form of a deferred notification queue.
- If the destination is not locked, the signals just go through.
- If the destination is locked, the signal materializes into the queue and when the lock is released by the holder, the queue will clear itself, applying all deferred notifications.
Implementations§
pub fn new(destination: Destination) -> SharedSubscriber<Destination>
Sourcepub fn lock(&self) -> MutexGuard<'_, Destination>
pub fn lock(&self) -> MutexGuard<'_, Destination>
Locks the shared destination. In case it encounters a poison error, the destination is immediately unsubscribed!
pub fn downgrade(&self) -> Weak<Mutex<Destination>>
Trait Implementations§
Source§fn clone(&self) -> SharedSubscriber<Destination>
fn clone(&self) -> SharedSubscriber<Destination>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moretype In = <Destination as ObserverInput>::In
type InError = <Destination as ObserverInput>::InError
Source§fn next(&mut self, next: <SharedSubscriber<Destination> as ObserverInput>::In)
fn next(&mut self, next: <SharedSubscriber<Destination> as ObserverInput>::In)
Signals the next value.
Source§fn error(
&mut self,
error: <SharedSubscriber<Destination> as ObserverInput>::InError,
)
fn error( &mut self, error: <SharedSubscriber<Destination> as ObserverInput>::InError, )
Signals an error of upstream, no more
next or complete calls
are expected after this!fn access<F>(&mut self, accessor: F)where
F: Fn(&Destination),
fn access_mut<F>(&mut self, accessor: F)where
F: FnMut(&mut Destination),
Source§fn is_closed(&self) -> bool
fn is_closed(&self) -> bool
Returns if the subscription is closed or not. A subscription can be
closed by calling unsubscribe on it. Some special subscriptions made
by observables that only ever emit values during subscribe, will produce
subscriptions that are created closed. Read more
Source§fn unsubscribe(&mut self)
fn unsubscribe(&mut self)
Releases all resources associated with this subscription, and marks it
as closed. Read more
Source§fn add_teardown(&mut self, teardown: Teardown)
fn add_teardown(&mut self, teardown: Teardown)
Add additional teardowns to execute on unsubscribe. If the subscription
is already closed, the added teardown is immediately executed!
Auto Trait Implementations§
Blanket Implementations§
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Converts
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Converts
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Converts
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Converts
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<S> EraseSubscriptionExtension for S
impl<S> EraseSubscriptionExtension for S
fn erase(self) -> ErasedSubscription
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
Source§fn into_result(self) -> Result<T, RunSystemError>
fn into_result(self) -> Result<T, RunSystemError>
Converts this type into the system output type.
Source§impl<T> ObserverPushObserverNotificationExtention for Twhere
T: RxObserver,
impl<T> ObserverPushObserverNotificationExtention for Twhere
T: RxObserver,
fn push( &mut self, notification: impl Into<ObserverNotification<<T as ObserverInput>::In, <T as ObserverInput>::InError>>, )
Source§impl<T> ObserverPushObserverTerminalNotificationExtention for Twhere
T: RxObserver,
impl<T> ObserverPushObserverTerminalNotificationExtention for Twhere
T: RxObserver,
fn push( &mut self, notification: impl Into<ObserverTerminalNotification<<T as ObserverInput>::InError>>, )
Source§impl<T> SubscriberPushNotificationExtention for Twhere
T: Subscriber,
impl<T> SubscriberPushNotificationExtention for Twhere
T: Subscriber,
fn push( &mut self, notification: impl Into<SubscriberNotification<<T as ObserverInput>::In, <T as ObserverInput>::InError>>, )
Wrap this subscription into a SharedSubscription, erasing it and
allowing you to freely clone it, to unsubscribe it from multiple places.