use std::any::Any;
use std::collections::HashMap;
use std::sync::Arc;
use core_types::MissionId;
use mission_core::session::BasicMissionSession;
use crate::bus::{ServiceBus, ServiceLoadEntry, TopicBus, TopicLoadEntry};
use crate::discovery::{DiscoverySnapshot, SimpleDiscovery};
use crate::qos::QosStore;
use crate::route::{LocalFirstRouteResolver, RouteRule};
use crate::serialization::SimpleSerializationManager;
use crate::session::{SessionLifecycleCounts, SimpleSessionManager};
mod channels;
mod discovery_registry;
mod mission_ops;
mod namespace;
mod transport;
#[derive(Clone, Debug)]
pub struct MiddlewareLoadSnapshot {
pub topics: Vec<TopicLoadEntry>,
pub services: Vec<ServiceLoadEntry>,
pub session_lifecycle: SessionLifecycleCounts,
pub discovery: DiscoverySnapshot,
}
pub struct MiddlewareStack {
discovery: SimpleDiscovery,
qos: QosStore,
serialization: SimpleSerializationManager,
session_manager: SimpleSessionManager,
route_resolver: LocalFirstRouteResolver,
route_rules: Vec<RouteRule>,
namespace_isolation: bool,
topic_bus: TopicBus,
service_bus: ServiceBus,
action_channels: HashMap<String, Arc<dyn Any + Send + Sync>>,
mission_sessions: HashMap<MissionId, BasicMissionSession>,
}
impl Default for MiddlewareStack {
fn default() -> Self {
Self {
discovery: SimpleDiscovery::default(),
qos: QosStore::default(),
serialization: SimpleSerializationManager,
session_manager: SimpleSessionManager::default(),
route_resolver: LocalFirstRouteResolver,
route_rules: Vec::new(),
namespace_isolation: false,
topic_bus: TopicBus::default(),
service_bus: ServiceBus::default(),
action_channels: HashMap::new(),
mission_sessions: HashMap::new(),
}
}
}