actr_runtime/transport/
route_table.rs1use actr_protocol::PayloadType;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
9pub enum DataChannelQoS {
10 Signal,
12
13 Reliable,
15
16 LatencyFirst,
18}
19
20#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
22pub enum DataLaneType {
23 WebRtcDataChannel(DataChannelQoS),
25
26 WebSocket,
28}
29
30pub trait PayloadTypeExt {
32 fn data_lane_types(self) -> &'static [DataLaneType];
34}
35
36impl PayloadTypeExt for PayloadType {
37 #[inline]
38 fn data_lane_types(self) -> &'static [DataLaneType] {
39 match self {
40 PayloadType::RpcReliable => &[
42 DataLaneType::WebRtcDataChannel(DataChannelQoS::Reliable),
43 DataLaneType::WebSocket,
44 ],
45
46 PayloadType::RpcSignal => &[
48 DataLaneType::WebRtcDataChannel(DataChannelQoS::Signal),
49 DataLaneType::WebSocket,
50 ],
51
52 PayloadType::StreamReliable => &[
54 DataLaneType::WebRtcDataChannel(DataChannelQoS::Reliable),
55 DataLaneType::WebSocket,
56 ],
57
58 PayloadType::StreamLatencyFirst => &[
60 DataLaneType::WebRtcDataChannel(DataChannelQoS::LatencyFirst),
61 DataLaneType::WebSocket,
62 ],
63
64 PayloadType::MediaRtp => &[],
66 }
67 }
68}
69
70impl DataLaneType {
71 #[inline]
73 pub fn needs_webrtc(self) -> bool {
74 matches!(self, DataLaneType::WebRtcDataChannel(_))
75 }
76
77 #[inline]
79 pub fn supports_websocket(self) -> bool {
80 matches!(self, DataLaneType::WebSocket)
81 }
82}