1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//! Catalog publish/subscribe.
//!
//! The catalog is a JSON document listing every track in a broadcast:
//! its codec, container, dimensions, and any decoder configuration the
//! subscriber needs. Two encodings coexist on every broadcast:
//!
//! - [`hang`] is hang's original shape, served on the `catalog.json` track.
//! - [`msf`] is the IETF-proposed alternative, served on the `catalog` track.
//!
//! Publishing through [`Producer`] writes both tracks together;
//! subscribers pick one based on the broadcast's filename suffix. See
//! [`CatalogFormat`] for the suffix-to-format mapping. The producer is
//! generic over an application extension `E` (see [`hang::CatalogExt`]),
//! defaulting to `()` for media-only catalogs.
//!
//! On the consume side, [`Consumer`] is the unified entry point: it
//! subscribes to whichever catalog track `format` advertises and yields
//! [`Catalog<E>`](hang::Catalog) snapshots. Wrap it with [`Select`] (driven by a
//! [`select::Broadcast`](crate::select::Broadcast)) to narrow the set before
//! handing it to an exporter; both also implement [`Stream`] so they compose
//! either direction.
pub use Consumer;
pub use *;
pub use ;
pub use Select;
pub use Stream;
pub use ;