protoflow_core/
transport.rs1use crate::{prelude::Bytes, InputPortID, OutputPortID, PortID, PortResult, PortState};
4
5#[allow(unused)]
6pub trait Transport: AsTransport + Send + Sync {
7 fn state(&self, port: PortID) -> PortResult<PortState> {
8 match port {
9 PortID::Input(input) => self.input_state(input),
10 PortID::Output(output) => self.output_state(output),
11 }
12 }
13
14 fn input_state(&self, port: InputPortID) -> PortResult<PortState>;
15 fn output_state(&self, port: OutputPortID) -> PortResult<PortState>;
16
17 fn open_input(&self) -> PortResult<InputPortID>;
18 fn open_output(&self) -> PortResult<OutputPortID>;
19
20 fn close(&self, port: PortID) -> PortResult<bool> {
21 Ok(match port {
22 PortID::Input(input) => self.close_input(input)?,
23 PortID::Output(output) => self.close_output(output)?,
24 })
25 }
26
27 fn close_input(&self, input: InputPortID) -> PortResult<bool>;
28 fn close_output(&self, output: OutputPortID) -> PortResult<bool>;
29 fn connect(&self, source: OutputPortID, target: InputPortID) -> PortResult<bool>;
30 fn send(&self, output: OutputPortID, message: Bytes) -> PortResult<()>;
31 fn recv(&self, input: InputPortID) -> PortResult<Option<Bytes>>;
32 fn try_recv(&self, input: InputPortID) -> PortResult<Option<Bytes>>;
33}
34
35pub trait AsTransport {
36 fn as_transport(&self) -> &dyn Transport;
37}
38
39impl<T: Transport + Sized> AsTransport for T {
40 fn as_transport(&self) -> &dyn Transport {
41 self
42 }
43}