saluki_core/topology/
mod.rs

1//! Topology building.
2
3use std::num::NonZeroUsize;
4
5use crate::data_model::payload::Payload;
6use crate::support::SubsystemIdentifier;
7use crate::topology::interconnect::FixedSizeEventBuffer;
8
9mod blueprint;
10pub use self::blueprint::{BlueprintError, TopologyBlueprint, TopologyReady};
11
12mod built;
13
14mod component_worker;
15
16mod context;
17pub use self::context::TopologyContext;
18
19mod graph;
20
21pub mod ids;
22pub use self::ids::{
23    ComponentId, ComponentOutputId, OutputDefinition, OutputName, TypedComponentId, TypedComponentOutputId,
24};
25
26pub mod interconnect;
27use self::interconnect::{Consumer, Dispatcher};
28
29#[cfg(test)]
30pub(super) mod test_util;
31
32// SAFETY: These are obviously non-zero.
33const DEFAULT_EVENTS_BUFFER_CAPACITY: usize = 1024;
34const DEFAULT_INTERCONNECT_CAPACITY: NonZeroUsize = NonZeroUsize::new(128).unwrap();
35
36// Topology-wide defaults.
37
38/// Default type for dispatching/consuming items from event-based components.
39pub type EventsBuffer = FixedSizeEventBuffer<DEFAULT_EVENTS_BUFFER_CAPACITY>;
40
41/// Default dispatcher for event-based components.
42pub type EventsDispatcher = Dispatcher<EventsBuffer>;
43
44/// Default consumer for event-based components.
45pub type EventsConsumer = Consumer<EventsBuffer>;
46
47/// Default type for dispatching/consuming items from payload-based components.
48pub type PayloadsBuffer = Payload;
49
50/// Default dispatcher for payload-based components.
51pub type PayloadsDispatcher = Dispatcher<PayloadsBuffer>;
52
53/// Default consumer for payload-based components.
54pub type PayloadsConsumer = Consumer<PayloadsBuffer>;
55
56pub(crate) fn topology_identifier(name: &str) -> SubsystemIdentifier {
57    SubsystemIdentifier::from_segments(["topology", name])
58}