Skip to main content

middleware_core/
route.rs

1use core_types::TransportDomain;
2use transport_core::{Endpoint, EndpointScheme};
3
4mod local_first;
5mod rules;
6mod selection;
7
8pub use rules::resolve_with_rules;
9
10#[derive(Clone, Copy, Debug, Eq, PartialEq)]
11pub enum RouteTrafficKind {
12    Topic,
13    Service,
14    Action,
15    Mission,
16}
17
18#[derive(Clone, Debug, Eq, PartialEq)]
19pub struct RouteHint {
20    pub preferred_domain: TransportDomain,
21    pub labels: Vec<String>,
22    pub target_name: Option<String>,
23    pub traffic_kind: Option<RouteTrafficKind>,
24}
25
26impl Default for RouteHint {
27    fn default() -> Self {
28        Self {
29            preferred_domain: TransportDomain::Local,
30            labels: Vec::new(),
31            target_name: None,
32            traffic_kind: None,
33        }
34    }
35}
36
37pub trait RouteResolver {
38    fn resolve(&self, endpoints: &[Endpoint], hint: &RouteHint) -> Option<Endpoint>;
39}
40
41#[derive(Clone, Debug, Eq, PartialEq)]
42pub struct RouteRule {
43    pub name: String,
44    pub preferred_domain: Option<TransportDomain>,
45    pub required_labels: Vec<String>,
46    pub preferred_schemes: Vec<EndpointScheme>,
47    pub name_patterns: Vec<String>,
48    pub match_kinds: Vec<RouteTrafficKind>,
49}
50
51impl RouteRule {}
52
53#[derive(Default)]
54pub struct LocalFirstRouteResolver;