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;