btp 0.1.0

A rust library of, a lightweight protocol, Blog Transfer Protocol.
Documentation
#[cfg(not(feature = "tls"))]
mod _impl {
    type Error = Box<dyn std::error::Error + Send + Sync>;
    use std::net::SocketAddr;
    use tokio::net::{TcpStream, ToSocketAddrs, lookup_host};

    use crate::socket::{BtpConfig, BtpSocket};

    impl BtpSocket<TcpStream, SocketAddr> {
        pub async fn connect<P: ToSocketAddrs + Send + Sync>(
            addr: P,
            conf: BtpConfig,
        ) -> Result<BtpSocket<TcpStream, SocketAddr>, Error> {
            let sock_addr = lookup_host(&addr)
                .await?
                .next()
                .ok_or("Couldn't find the IP address of the host")?;

            let sock = TcpStream::connect(&addr).await.unwrap();

            Ok(BtpSocket::from(sock, conf, sock_addr))
        }
    }
}

#[cfg(feature = "tls")]
mod _impl {
    type Error = Box<dyn std::error::Error + Send + Sync>;
    use std::net::SocketAddr;

    use rustls::pki_types::ServerName;
    use tokio::net::{TcpStream, ToSocketAddrs, lookup_host};
    use tokio_rustls::{TlsConnector, client::TlsStream};

    use crate::socket::{BtpConfig, BtpSocket};

    impl BtpSocket<TlsStream<TcpStream>, SocketAddr> {
        pub async fn connect<P: ToSocketAddrs + Send + Sync>(
            addr: P,
            connector: TlsConnector,
            conf: BtpConfig,
        ) -> Result<BtpSocket<TlsStream<TcpStream>, SocketAddr>, Error> {
            let sock_addr = lookup_host(&addr)
                .await?
                .next()
                .ok_or("Couldn't find the IP address of the host")?;
            let server_name = ServerName::IpAddress(sock_addr.ip().into());

            let sock = TcpStream::connect(&addr).await.unwrap();
            let tls_connection = connector.connect(server_name, sock).await?;

            Ok(BtpSocket::from(tls_connection, conf, sock_addr))
        }
    }
}