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 action_channels: HashMap<String, Arc<dyn Any + Send + Sync>>,
41 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}