trillium-client 0.7.0

http/1.x client for trillium.rs
Documentation
use futures_lite::StreamExt;
use trillium_client::{
    Client, WebSocketConn,
    websocket::{self, Message},
};
use trillium_http::Status;
use trillium_testing::client_config;
use trillium_websockets::websocket;

#[test]
fn test_websockets() {
    let handler = websocket(|mut conn: WebSocketConn| async move {
        while let Some(Ok(Message::Text(input))) = conn.next().await {
            conn.send_string(format!("Server received your message: {input}"))
                .await
                .expect("send_string");
        }
    });

    let client = Client::new(client_config());

    trillium_testing::with_server(handler, move |url| async move {
        let mut ws = client.get(url).into_websocket().await?;

        ws.send_string("Client test message".to_string()).await?;

        let response = ws.next().await.expect("response")?;

        assert_eq!(
            response,
            Message::text("Server received your message: Client test message"),
        );

        Ok(())
    })
}

#[test]
fn test_websockets_error() {
    let handler =
        |conn: trillium::Conn| async { conn.with_status(404).with_body("This does not exist") };
    let client = Client::new(client_config());
    trillium_testing::with_server(handler, move |url| async move {
        let err = client
            .get(url)
            .into_websocket()
            .await
            .expect_err("Expected a 404");
        assert!(matches!(
            err.kind,
            websocket::ErrorKind::Status(Status::NotFound),
        ));
        let mut conn = trillium_client::Conn::from(err);
        let body = conn.response_body().read_string().await?;
        assert_eq!(body, "This does not exist");

        Ok(())
    })
}