sonos_api/events/mod.rs
1//! Event handling framework for Sonos UPnP services
2//!
3//! This module provides a comprehensive event handling system that consolidates
4//! event processing logic from across the Sonos SDK. Each service handles its
5//! own event types and parsing logic, while this framework provides common
6//! infrastructure for event processing, routing, and management.
7//!
8//! # Architecture
9//!
10//! - **Service-specific events**: Each service module (av_transport, rendering_control, etc.)
11//! defines its own event types and parsing logic in an `events` submodule
12//! - **Common framework**: This module provides generic event processing infrastructure
13//! - **Type safety**: Events are strongly typed per service while maintaining flexibility
14//!
15//! # Usage
16//!
17//! ## Service-specific event handling
18//! ```rust,ignore
19//! use sonos_api::services::av_transport;
20//! use sonos_api::events::EventSource;
21//!
22//! // Parse an AVTransport event
23//! let parser = av_transport::events::AVTransportEventParser;
24//! let event_data = parser.parse_upnp_event(xml_content)?;
25//!
26//! // Create enriched event
27//! let enriched = av_transport::events::create_enriched_event(
28//! speaker_ip,
29//! EventSource::UPnPNotification { subscription_id: "uuid:123".to_string() },
30//! event_data
31//! );
32//! ```
33//!
34//! ## Generic event processing
35//! ```rust,ignore
36//! use sonos_api::events::{EventParserRegistry, EventProcessor};
37//!
38//! // Register parsers for all services
39//! let mut registry = EventParserRegistry::new();
40//! registry.register(av_transport::events::AVTransportEventParser);
41//! registry.register(rendering_control::events::RenderingControlEventParser);
42//!
43//! // Process events generically
44//! let processor = EventProcessor::new(registry);
45//! processor.process_event(service, xml_content, event_source)?;
46//! ```
47
48pub mod processor;
49pub mod types;
50pub mod xml_utils;
51
52// Re-export common types for convenience
53pub use processor::EventProcessor;
54pub use types::{
55 extract_xml_value, EnrichedEvent, EventParser, EventParserDyn, EventParserRegistry, EventSource,
56};
57pub use xml_utils::{
58 deserialize_nested, parse, strip_namespaces, DidlItem, DidlLite, DidlResource, NestedAttribute,
59 ValueAttribute,
60};