Skip to main content

EventRouter

Struct EventRouter 

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

Routes events from HTTP callbacks to a channel.

The EventRouter maintains a set of active subscription IDs. When an event is received via HTTP callback, the router checks if the subscription is registered and sends the notification payload to the configured channel.

Implementations§

Source§

impl EventRouter

Source

pub fn new(event_sender: UnboundedSender<NotificationPayload>) -> Self

Create a new event router.

§Arguments
  • event_sender - Channel for sending notification payloads
§Example
use tokio::sync::mpsc;
use callback_server::router::{EventRouter, NotificationPayload};

let (tx, mut rx) = mpsc::unbounded_channel::<NotificationPayload>();
let router = EventRouter::new(tx);
Source

pub async fn register(&self, subscription_id: String)

Register a subscription ID for event routing.

This adds the subscription ID to the set of active subscriptions, allowing incoming events for this subscription to be routed.

§Arguments
  • subscription_id - The UPnP subscription ID to register
§Example
router.register("uuid:subscription-123".to_string()).await;
Source

pub async fn unregister(&self, subscription_id: &str)

Unregister a subscription ID.

Removes the subscription ID from the set of active subscriptions, preventing future events for this subscription from being routed.

§Arguments
  • subscription_id - The subscription ID to unregister
§Example
router.unregister("uuid:subscription-123").await;
Source

pub async fn route_event( &self, subscription_id: String, event_xml: String, ) -> bool

Route an incoming event to the unified event stream.

This method is the core of the unified event stream processing pattern. It checks if the subscription ID is registered and sends a NotificationPayload to the configured channel for further processing by the event stream processor.

The unified approach means that all events from all speakers and services flow through this single routing point, enabling efficient aggregation and processing.

§Arguments
  • subscription_id - The subscription ID from the UPnP SID header
  • event_xml - The raw XML event body from the UPnP notification
§Returns

Returns true if the event was successfully routed to the unified stream, false if the subscription ID was not registered.

§Unified Event Processing

This method enables the unified event stream processor pattern by:

  1. Validating that the subscription is registered and active
  2. Creating a generic notification payload with subscription context
  3. Forwarding to the unified event stream for service-specific processing
  4. Allowing downstream components to add speaker and service context
§Example
let routed = router.route_event(
    "uuid:subscription-123".to_string(),
    "<event>data</event>".to_string()
).await;
assert!(routed);

Trait Implementations§

Source§

impl Clone for EventRouter

Source§

fn clone(&self) -> EventRouter

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. 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> 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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