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}