Struct InMemorySubscriber

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

A Subscriber which keeps all information about registered subscription change handlers in memory.

The subscriber requires a (client) implementation of USubscription in order to inform the local USubscription service about newly subscribed and unsubscribed topics. It also needs a Notifier for receiving notifications about subscription status updates from the local USubscription service. Finally, it needs a UTransport for receiving events that have been published to subscribed topics.

During startup the subscriber uses the Notifier to register a generic UListener for receiving notifications from the USubscription service. The listener maintains an in-memory mapping of subscribed topics to corresponding subscription change handlers.

When a client subscribes to a topic, the local USubscription service is informed about the new subscription and a (client provided) subscription change handler is registered with the listener. When a subscription change notification arrives from the USubscription service, the corresponding handler is being looked up and invoked.

Implementations§

Source§

impl InMemorySubscriber

Source

pub async fn new( transport: Arc<dyn UTransport>, uri_provider: Arc<dyn LocalUriProvider>, ) -> Result<Self, RegistrationError>

Creates a new Subscriber for a given transport.

The subscriber keeps track of subscription change handlers in memory only. This function uses the given transport to create an RpcClientUSubscription and a SimpleNotifier and then delegate to Self::for_clients to create the Subscriber.

§Errors

Returns an error if the Notifier cannot register a listener for notifications from the USubscription service.

Source

pub async fn for_clients( transport: Arc<dyn UTransport>, uri_provider: Arc<dyn LocalUriProvider>, usubscription: Arc<dyn USubscription>, notifier: Arc<dyn Notifier>, ) -> Result<Self, RegistrationError>

Creates a new Subscriber for given clients.

§Arguments
  • transport - The transport to use for registering the event listeners for subscribed topics.
  • uri-provider - The service to use for creating topic addresses.
  • usubscription - The client to use for interacting with the (local) USubscription service.
  • notifier - The client to use for registering the listener for subscription updates from USubscription.
§Errors

Returns an error if the Notifier cannot register a listener for notifications from the USubscription service.

Source

pub async fn stop(&self) -> Result<(), RegistrationError>

Stops this client.

Clears all internal state and deregisters the listener for subscription updates from the USubscription service.

§Errors

Returns an error if the listener could not be unregistered. In this case the internal state remains intact.

Trait Implementations§

Source§

impl Subscriber for InMemorySubscriber

Source§

fn subscribe<'life0, 'life1, 'async_trait>( &'life0 self, topic_filter: &'life1 UUri, handler: Arc<dyn UListener>, subscription_change_handler: Option<Arc<dyn SubscriptionChangeHandler>>, ) -> Pin<Box<dyn Future<Output = Result<(), RegistrationError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Registers a handler to invoke for messages that have been published to a given topic. Read more
Source§

fn unsubscribe<'life0, 'life1, 'async_trait>( &'life0 self, topic: &'life1 UUri, listener: Arc<dyn UListener>, ) -> Pin<Box<dyn Future<Output = Result<(), RegistrationError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Deregisters a previously registered handler. Read more

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> Any for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Source§

fn type_name(&self) -> &'static str

Source§

impl<T> AnySync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

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