saluki_core/topology/
mod.rs

1//! Topology building.
2
3use std::num::NonZeroUsize;
4
5use memory_accounting::ComponentRegistry;
6
7use crate::data_model::payload::Payload;
8use crate::topology::interconnect::FixedSizeEventBuffer;
9
10mod blueprint;
11pub use self::blueprint::{BlueprintError, TopologyBlueprint};
12
13mod built;
14pub use self::built::BuiltTopology;
15
16mod context;
17pub use self::context::TopologyContext;
18
19mod graph;
20
21mod ids;
22pub use self::ids::*;
23
24pub mod interconnect;
25use self::interconnect::{Consumer, Dispatcher};
26
27mod running;
28pub use self::running::RunningTopology;
29
30pub mod shutdown;
31
32#[cfg(test)]
33pub(super) mod test_util;
34
35// SAFETY: These are obviously non-zero.
36const DEFAULT_EVENTS_BUFFER_CAPACITY: usize = 1024;
37const DEFAULT_INTERCONNECT_CAPACITY: NonZeroUsize = NonZeroUsize::new(128).unwrap();
38
39// Topology-wide defaults.
40
41/// Default type for dispatching/consuming items from event-based components.
42pub type EventsBuffer = FixedSizeEventBuffer<DEFAULT_EVENTS_BUFFER_CAPACITY>;
43
44/// Default dispatcher for event-based components.
45pub type EventsDispatcher = Dispatcher<EventsBuffer>;
46
47/// Default consumer for event-based components.
48pub type EventsConsumer = Consumer<EventsBuffer>;
49
50/// Default type for dispatching/consuming items from payload-based components.
51pub type PayloadsBuffer = Payload;
52
53/// Default dispatcher for payload-based components.
54pub type PayloadsDispatcher = Dispatcher<PayloadsBuffer>;
55
56/// Default consumer for payload-based components.
57pub type PayloadsConsumer = Consumer<PayloadsBuffer>;
58
59pub(super) struct RegisteredComponent<T> {
60    component: T,
61    component_registry: ComponentRegistry,
62}
63
64impl<T> RegisteredComponent<T> {
65    fn new(component: T, component_registry: ComponentRegistry) -> Self {
66        Self {
67            component,
68            component_registry,
69        }
70    }
71    fn into_parts(self) -> (T, ComponentRegistry) {
72        (self.component, self.component_registry)
73    }
74}