Skip to main content

oxideav_core/registry/
context.rs

1//! Unified runtime registration context.
2//!
3//! [`RuntimeContext`] bundles every registry the framework needs into a
4//! single value that consumers pass around (codec/container/source/
5//! filter). Sibling crates expose a uniform `register(&mut
6//! RuntimeContext)` entry point that installs themselves into the
7//! relevant sub-registry.
8
9use super::codec::CodecRegistry;
10use super::container::ContainerRegistry;
11use super::filter::FilterRegistry;
12use super::source::SourceRegistry;
13
14/// Aggregate of every registry the framework consumes.
15///
16/// Every sibling crate that contributes implementations exposes
17/// `pub fn register(ctx: &mut RuntimeContext)` to install itself.
18/// Construct with [`RuntimeContext::new`] for an empty context, then
19/// call each sibling's `register` to fill it in.
20#[derive(Default)]
21pub struct RuntimeContext {
22    pub codecs: CodecRegistry,
23    pub containers: ContainerRegistry,
24    pub sources: SourceRegistry,
25    pub filters: FilterRegistry,
26}
27
28impl RuntimeContext {
29    /// Empty context — no codecs, no containers, no source schemes, no
30    /// filters. Sibling crates fill in the four sub-registries via
31    /// their `register(&mut RuntimeContext)` entry points.
32    pub fn new() -> Self {
33        Self::default()
34    }
35}