axol 0.2.0

Axol Web Framework
#![cfg(feature = "ws")]

use axol::{Message, Router, WebSocketUpgrade};
use axol_http::response::Response;

mod common;
use common::*;
use futures::{SinkExt, StreamExt};
use tokio_tungstenite::tungstenite::Message as TTMessage;

async fn simple_ws(ws: WebSocketUpgrade) -> Response {
    ws.on_upgrade(|mut c| async move {
        match c.recv().await.unwrap().unwrap() {
            Message::Text(text) => {
                c.send(Message::Text(text)).await.unwrap();
            }
            _ => panic!("invalid message at server"),
        }
    })
}

#[tokio::test]
async fn websocket_tests() {
    let server = spawn_router(Router::new().get("/ws", simple_ws)).await;

    let (mut stream, _) = tokio_tungstenite::connect_async(server.ws_url("/ws"))
        .await
        .unwrap();

    stream
        .send(TTMessage::Text("test message".into()))
        .await
        .unwrap();
    match stream.next().await.unwrap().unwrap() {
        TTMessage::Text(text) => {
            assert_eq!(text, "test message");
        }
        _ => panic!("invalid message at client"),
    }
}