use futures::{Sink, Stream};
use std::future::Future;
use crate::RPCResult;
pub type TransportInput<E> = Result<RPCData, E>;
pub type RPCData = bytes::Bytes;
pub trait TransportChannel: 'static {
type SinkError: std::error::Error + 'static + Sync + Send;
type StreamError: std::error::Error + 'static + Sync + Send;
type Input: Stream<Item = TransportInput<Self::StreamError>> + Unpin + Send + 'static;
type Output: Sink<RPCData, Error = Self::SinkError> + Unpin + Send + 'static;
fn spawn<Fut>(future: Fut)
where
Fut: Future<Output = RPCResult<()>> + Send + 'static;
fn framed(self) -> (Self::Input, Self::Output);
}