tokio-websockets 0.8.3

High performance, strict, tokio-util based WebSockets implementation
Documentation
use futures_util::{SinkExt, StreamExt};
use http::Uri;
use tokio_native_tls::native_tls::{Certificate, TlsConnector};
use tokio_websockets::{ClientBuilder, Error};

#[tokio::main]
async fn main() -> Result<(), Error> {
    let uri = Uri::from_static("wss://127.0.0.1:8080");
    let bytes = std::fs::read("certs/localhost.crt")?;
    let cert = Certificate::from_pem(&bytes)?;
    let connector = TlsConnector::builder().add_root_certificate(cert).build()?;
    let connector = tokio_websockets::Connector::NativeTls(connector.into());

    let (mut client, _) = ClientBuilder::from_uri(uri)
        .connector(&connector)
        .connect()
        .await?;

    let msg = client.next().await;

    println!("Got message: {msg:?}");

    client.close().await?;

    Ok(())
}