robotrt-middleware-core 0.1.0-beta.2

RobotRT modular robotics runtime and middleware components.
Documentation
use core_types::TransportDomain;
use transport_core::{Endpoint, EndpointScheme};

mod local_first;
mod rules;
mod selection;

pub use rules::resolve_with_rules;

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum RouteTrafficKind {
    Topic,
    Service,
    Action,
    Mission,
}

#[derive(Clone, Debug, Eq, PartialEq)]
pub struct RouteHint {
    pub preferred_domain: TransportDomain,
    pub labels: Vec<String>,
    pub target_name: Option<String>,
    pub traffic_kind: Option<RouteTrafficKind>,
}

impl Default for RouteHint {
    fn default() -> Self {
        Self {
            preferred_domain: TransportDomain::Local,
            labels: Vec::new(),
            target_name: None,
            traffic_kind: None,
        }
    }
}

pub trait RouteResolver {
    fn resolve(&self, endpoints: &[Endpoint], hint: &RouteHint) -> Option<Endpoint>;
}

#[derive(Clone, Debug, Eq, PartialEq)]
pub struct RouteRule {
    pub name: String,
    pub preferred_domain: Option<TransportDomain>,
    pub required_labels: Vec<String>,
    pub preferred_schemes: Vec<EndpointScheme>,
    pub name_patterns: Vec<String>,
    pub match_kinds: Vec<RouteTrafficKind>,
}

impl RouteRule {}

#[derive(Default)]
pub struct LocalFirstRouteResolver;