ugi 0.2.1

Runtime-agnostic Rust request client with HTTP/1.1, HTTP/2, HTTP/3, H2C, WebSocket, SSE, and gRPC support
Documentation
use futures_lite::future::block_on;
use ugi::WebSocketMessage;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    block_on(async move {
        let client = ugi::Client::builder().bearer_auth("token")?.build()?;
        let mut socket = client
            .ws("wss://stream.example.com/echo")
            .protocol("chat.v1")
            .await?;

        socket.send_text("hello from request").await?;

        match socket.next().await {
            Some(Ok(WebSocketMessage::Text(text))) => println!("{text}"),
            Some(Ok(message)) => println!("{message:?}"),
            Some(Err(err)) => return Err(err.into()),
            None => {}
        }

        socket.close().await?;
        Ok(())
    })
}