rants 0.6.0

An async NATS client library.
Documentation
#[cfg(feature = "rustls-tls")]
use crate::error::Error;
use crate::error::Result;
#[cfg(feature = "native-tls")]
pub use native_tls_crate::{Error as TlsError, TlsConnector as TlsConfig};
#[cfg(feature = "rustls-tls")]
pub use rustls::{ClientConfig as TlsConfig, Error as TlsError, ServerName};
#[cfg(feature = "rustls-tls")]
use std::{convert::TryFrom, sync::Arc};
use tokio::net::TcpStream;
#[cfg(feature = "native-tls")]
pub use tokio_native_tls::{TlsConnector, TlsStream};
#[cfg(feature = "rustls-tls")]
pub use tokio_rustls::{client::TlsStream, TlsConnector};

pub async fn tls_stream(
    tls_config: TlsConfig,
    domain: &str,
    stream: TcpStream,
) -> Result<TlsStream<TcpStream>> {
    #[cfg(feature = "native-tls")]
    let tls_connector = TlsConnector::from(tls_config);
    #[cfg(feature = "rustls-tls")]
    let (tls_connector, domain) = (
        TlsConnector::from(Arc::new(tls_config)),
        ServerName::try_from(domain).map_err(|_| Error::InvalidDnsName(String::from(domain)))?,
    );
    Ok(tls_connector.connect(domain, stream).await?)
}