robotrt-middleware-core 0.1.0-beta.2

RobotRT modular robotics runtime and middleware components.
Documentation
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,
    /// Type-erased store for `Arc<ActionChannel<G,F,R>>` keyed by action name.
    action_channels: HashMap<String, Arc<dyn Any + Send + Sync>>,
    /// Active Mission sessions managed by this stack.
    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(),
        }
    }
}