Preview of the proposed up-rust native-frame-model branch (up-rust b6b99c6d, up-spec f0e9b17) — not released documentation. branch · write-up

Struct InMemorySubscriber

Source
pub struct InMemorySubscriber<T, S, N> { /* 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<T: UTransport + 'static, P: LocalUriProvider + 'static> InMemorySubscriber<T, RpcClientUSubscription, SimpleNotifier<T, P>>

Source

pub async fn new( transport: Arc<T>, uri_provider: Arc<P>, ) -> 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 crate::core::usubscription::RpcClientUSubscription and a crate::communication::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§

impl<T: UTransport, S: USubscription, N: Notifier> InMemorySubscriber<T, S, N>

Source

pub async fn for_clients( transport: Arc<T>, usubscription: Arc<S>, notifier: Arc<N>, ) -> Result<Self, RegistrationError>

Creates a new Subscriber for given clients.

§Arguments
  • transport - The transport to use for registering the event listeners for subscribed topics.
  • 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<T, S, N> Debug for InMemorySubscriber<T, S, N>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: UTransport, U: USubscription, N: Notifier> Subscriber for InMemorySubscriber<T, U, N>

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§

§

impl<T, S, N> Freeze for InMemorySubscriber<T, S, N>

§

impl<T, S, N> RefUnwindSafe for InMemorySubscriber<T, S, N>

§

impl<T, S, N> Send for InMemorySubscriber<T, S, N>
where T: Sync + Send, S: Sync + Send, N: Sync + Send,

§

impl<T, S, N> Sync for InMemorySubscriber<T, S, N>
where T: Sync + Send, S: Sync + Send, N: Sync + Send,

§

impl<T, S, N> Unpin for InMemorySubscriber<T, S, N>

§

impl<T, S, N> UnwindSafe for InMemorySubscriber<T, S, N>

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
§

impl<T> Any for T
where T: Any,

§

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

§

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

§

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

§

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

§

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

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.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

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> 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<TCore> UWithNativePrefixWire for TCore

Source§

fn into_native_prefix_wire_transport<W>( self, wire: W, ) -> UWireTransport<TCore, W, NativePrefixFrameMetadataCodec>
where W: UWire,

Wraps this core with an external or custom selected wire using canonical metadata.
Source§

fn into_protobuf_transport( self, ) -> UWireTransport<TCore, ProtobufWire, NativePrefixFrameMetadataCodec>

Wraps this core with the Protocol Buffers selected-wire profile.
Source§

fn into_stable_container_transport( self, ) -> UWireTransport<TCore, StableContainerWireFormat, NativePrefixFrameMetadataCodec>

Wraps this core with the stable-container selected-wire profile.
§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more