sfo_cmd_server/
tunnel.rs

1use std::any::Any;
2use std::sync::Arc;
3use as_any::AsAny;
4use sfo_split::{RHalf, Splittable, WHalf};
5use tokio::io::{AsyncRead, AsyncWrite};
6use crate::PeerId;
7
8pub trait CmdTunnelMeta: Send + Sync + 'static {
9
10}
11
12impl<T: Send + Sync + 'static> CmdTunnelMeta for T {
13    
14}
15
16pub trait CmdTunnelRead<M: CmdTunnelMeta>: Send + AsyncRead + 'static + Unpin + Any + AsAny {
17    fn get_remote_peer_id(&self) -> PeerId;
18    fn get_tunnel_meta(&self) -> Option<Arc<M>> {
19        None
20    }
21}
22
23pub trait CmdTunnelWrite<M: CmdTunnelMeta>: AsyncWrite + Send + 'static + Unpin + Any + AsAny {
24    fn get_remote_peer_id(&self) -> PeerId;
25    fn get_tunnel_meta(&self) -> Option<Arc<M>> {
26        None
27    }
28}
29
30pub type CmdTunnel<R, W> = Splittable<R, W>;
31pub type CmdTunnelRHalf<R, W> = RHalf<R, W>;
32pub type CmdTunnelWHalf<R, W> = WHalf<R, W>;
33