resty 0.1.4

A fast, concurrent and multi-threadable REST framework
Documentation
use std::{marker::PhantomData, net::SocketAddrV4};

use smol::net::{AsyncToSocketAddrs, TcpListener, TcpStream};

pub struct TcpScocket<A = SocketAddrV4>(TcpListener, PhantomData<A>);

impl<A: AsyncToSocketAddrs + Send + Sync> super::Socket for TcpScocket<A> {
    type Error = smol::io::Error;
    type Address = A;
    type Stream = TcpStream;

    async fn bind(addr: Self::Address) -> Result<Box<Self>, Self::Error> {
        TcpListener::bind(addr)
            .await
            .map(|listener| Box::new(TcpScocket(listener, PhantomData)))
    }

    async fn accept(&self) -> Result<Self::Stream, Self::Error> {
        let (stream, ..) = self.0.accept().await?;
        stream.set_nodelay(true)?;

        Ok(stream)
    }
}