ogurpchik 0.1.0

A transport-agnostic RPC framework for stream and memory-based communication. Built with high-performance primitives to deliver medium-performance results.
use compio::io::{AsyncRead, AsyncReadAt, AsyncWrite};
use socket2::SockAddr;
use std::io;

pub mod adapters;
pub mod tcp;
pub mod vsock;

pub trait AsyncStream: Splitable + AsyncRead + AsyncWrite + Unpin + Clone + 'static {}

impl<T: Splitable + AsyncRead + AsyncWrite + Unpin + Clone + 'static> AsyncStream for T {}

pub trait Splitable {
    fn split(self) -> io::Result<(Self, Self)>
    where
        Self: Sized;
}

pub trait Connector: Send + Sync + 'static {
    type Stream: AsyncStream;
    async fn connect(&self) -> io::Result<Self::Stream>;
}

pub trait Acceptor: 'static {
    type Stream: AsyncStream;
    async fn accept(&self) -> io::Result<(Self::Stream, SockAddr)>;
}

pub trait AcceptorBuilder: Send + Sync + 'static {
    type Stream: AsyncStream;
    type Acceptor: Acceptor<Stream = Self::Stream>;
    async fn bind(self) -> io::Result<Self::Acceptor>;
}