1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
use crate::error::RSocketError; use crate::frame::Frame; use crate::payload::SetupPayload; use crate::spi::RSocket; use futures::channel::{mpsc, oneshot}; use std::error::Error; use std::future::Future; use std::pin::Pin; use std::result::Result; use std::sync::Arc; pub type Tx<T> = mpsc::UnboundedSender<T>; pub type Rx<T> = mpsc::UnboundedReceiver<T>; pub type TxOnce<T> = oneshot::Sender<T>; pub type RxOnce<T> = oneshot::Receiver<T>; pub(crate) fn new_tx_rx_once<T>() -> (TxOnce<T>, RxOnce<T>) { oneshot::channel() } pub(crate) fn new_tx_rx<T>() -> (Tx<T>, Rx<T>) { mpsc::unbounded() } pub trait ClientTransport { fn attach( self, incoming: Tx<Frame>, sending: Rx<Frame>, connected: Option<TxOnce<Result<(), RSocketError>>>, ); } pub trait ServerTransport { type Item; fn start( self, starter: Option<fn()>, acceptor: impl Fn(Self::Item) + Send + Sync + 'static, ) -> Pin<Box<dyn Send + Future<Output = Result<(), Box<dyn Send + Sync + Error>>>>> where Self::Item: ClientTransport + Sized; } pub type FnAcceptorWithSetup = fn(SetupPayload, Box<dyn RSocket>) -> Result<Box<dyn RSocket>, Box<dyn Error>>; pub(crate) enum Acceptor { Simple(Arc<fn() -> Box<dyn RSocket>>), Generate(Arc<FnAcceptorWithSetup>), Empty(), }