1#![allow(clippy::bool_assert_comparison)]
2
3use atm0s_sdn_identity::{ConnId, NodeId};
4use atm0s_sdn_router::RouteRule;
5use base::{FeatureControlActor, NeighboursControl, NetIncomingMeta, NetOutgoingMeta, SecureContext, ServiceControlActor, ServiceId};
6use data_plane::{CrossWorker, NetPair};
7use features::{Features, FeaturesControl, FeaturesEvent, FeaturesToController, FeaturesToWorker};
8use sans_io_runtime::Buffer;
9
10#[cfg(feature = "fuzz")]
11pub mod _fuzz_export;
12pub mod base;
13pub mod controller_plane;
14pub mod data_plane;
15pub mod features;
16pub mod secure;
17pub mod services;
18pub mod worker;
19
20#[derive(Debug, Clone)]
21pub enum ExtIn<UserData, ServicesControl> {
22 FeaturesControl(UserData, FeaturesControl),
23 ServicesControl(ServiceId, UserData, ServicesControl),
24}
25
26#[derive(Debug, Clone, PartialEq, Eq)]
27pub enum ExtOut<UserData, ServicesEvent> {
28 FeaturesEvent(UserData, FeaturesEvent),
29 ServicesEvent(ServiceId, UserData, ServicesEvent),
30}
31
32#[derive(Debug, Clone)]
33pub enum LogicControl<UserData, SC, SE, TC> {
34 Feature(FeaturesToController),
35 Service(ServiceId, TC),
36 NetNeighbour(NetPair, NeighboursControl),
37 NetRemote(Features, ConnId, NetIncomingMeta, Buffer),
38 NetLocal(Features, NetIncomingMeta, Buffer),
39 FeaturesControl(FeatureControlActor<UserData>, FeaturesControl),
40 ServicesControl(ServiceControlActor<UserData>, ServiceId, SC),
41 ServiceEvent(ServiceId, FeaturesEvent),
42 ExtFeaturesEvent(UserData, FeaturesEvent),
43 ExtServicesEvent(ServiceId, UserData, SE),
44}
45
46#[derive(Debug, Clone)]
47pub enum LogicEvent<UserData, SE, TW> {
48 NetNeighbour(NetPair, NeighboursControl),
49 NetDirect(Features, NetPair, ConnId, NetOutgoingMeta, Buffer),
50 NetRoute(Features, RouteRule, NetOutgoingMeta, Buffer),
51
52 Pin(ConnId, NodeId, NetPair, SecureContext),
53 UnPin(ConnId),
54 Feature(bool, FeaturesToWorker<UserData>),
56 Service(ServiceId, TW),
57 ExtFeaturesEvent(u16, UserData, FeaturesEvent),
59 ExtServicesEvent(u16, ServiceId, UserData, SE),
61}
62
63pub enum LogicEventDest<UserData, SE, TW> {
64 Broadcast(LogicEvent<UserData, SE, TW>),
65 Worker(u16, CrossWorker<UserData, SE>),
66 Any(LogicEvent<UserData, SE, TW>),
67}
68
69impl<UserData, SE, TW> LogicEvent<UserData, SE, TW> {
70 pub fn with_dest(self) -> LogicEventDest<UserData, SE, TW> {
71 match self {
72 LogicEvent::Pin(..) => LogicEventDest::Broadcast(self),
73 LogicEvent::UnPin(..) => LogicEventDest::Broadcast(self),
74 LogicEvent::Service(..) => LogicEventDest::Broadcast(self),
75 LogicEvent::Feature(true, ..) => LogicEventDest::Broadcast(self),
76 LogicEvent::Feature(false, ..) => LogicEventDest::Any(self),
77 LogicEvent::NetNeighbour(_, _) => LogicEventDest::Any(self),
78 LogicEvent::NetDirect(_, _, _, _, _) => LogicEventDest::Any(self),
79 LogicEvent::NetRoute(_, _, _, _) => LogicEventDest::Any(self),
80 LogicEvent::ExtFeaturesEvent(worker, user_data, event) => LogicEventDest::Worker(worker, CrossWorker::Feature(user_data, event)),
81 LogicEvent::ExtServicesEvent(worker, service_id, user_data, event) => LogicEventDest::Worker(worker, CrossWorker::Service(service_id, user_data, event)),
82 }
83 }
84}