Skip to main content

middleware_core/
stack.rs

1use std::any::Any;
2use std::collections::HashMap;
3use std::sync::Arc;
4
5use core_types::MissionId;
6use mission_core::session::BasicMissionSession;
7
8use crate::bus::{ServiceBus, ServiceLoadEntry, TopicBus, TopicLoadEntry};
9use crate::discovery::{DiscoverySnapshot, SimpleDiscovery};
10use crate::qos::QosStore;
11use crate::route::{LocalFirstRouteResolver, RouteRule};
12use crate::serialization::SimpleSerializationManager;
13use crate::session::{SessionLifecycleCounts, SimpleSessionManager};
14
15mod channels;
16mod discovery_registry;
17mod mission_ops;
18mod namespace;
19mod transport;
20
21#[derive(Clone, Debug)]
22pub struct MiddlewareLoadSnapshot {
23    pub topics: Vec<TopicLoadEntry>,
24    pub services: Vec<ServiceLoadEntry>,
25    pub session_lifecycle: SessionLifecycleCounts,
26    pub discovery: DiscoverySnapshot,
27}
28
29pub struct MiddlewareStack {
30    discovery: SimpleDiscovery,
31    qos: QosStore,
32    serialization: SimpleSerializationManager,
33    session_manager: SimpleSessionManager,
34    route_resolver: LocalFirstRouteResolver,
35    route_rules: Vec<RouteRule>,
36    namespace_isolation: bool,
37    topic_bus: TopicBus,
38    service_bus: ServiceBus,
39    /// Type-erased store for `Arc<ActionChannel<G,F,R>>` keyed by action name.
40    action_channels: HashMap<String, Arc<dyn Any + Send + Sync>>,
41    /// Active Mission sessions managed by this stack.
42    mission_sessions: HashMap<MissionId, BasicMissionSession>,
43}
44
45impl Default for MiddlewareStack {
46    fn default() -> Self {
47        Self {
48            discovery: SimpleDiscovery::default(),
49            qos: QosStore::default(),
50            serialization: SimpleSerializationManager,
51            session_manager: SimpleSessionManager::default(),
52            route_resolver: LocalFirstRouteResolver,
53            route_rules: Vec::new(),
54            namespace_isolation: false,
55            topic_bus: TopicBus::default(),
56            service_bus: ServiceBus::default(),
57            action_channels: HashMap::new(),
58            mission_sessions: HashMap::new(),
59        }
60    }
61}