axol 0.1.5

Axol Web Framework
Documentation
use std::borrow::Cow;

use axol::{Path, Query, Router};
use axol_http::StatusCode;
use serde::Deserialize;

mod common;
use common::*;

async fn simple_get() -> &'static str {
    "success"
}

async fn empty_get() {}

async fn simple_path(Path(path): Path<Cow<'_, str>>) -> String {
    format!("success {path}")
}

#[derive(Deserialize)]
struct SimpleQuery<'a> {
    name: Cow<'a, str>,
}

async fn simple_query(Query(SimpleQuery { name }): Query<SimpleQuery<'_>>) -> String {
    format!("success {name}")
}

#[tokio::test]
async fn router_tests() {
    let handle = spawn_router(
        Router::new()
            .get("/", simple_get)
            .get("/empty", empty_get)
            .get("/var/:var", simple_path)
            .get("/query", simple_query),
    )
    .await;

    let response = reqwest::get(format!("http://{}/", *TEST_ADDRESS))
        .await
        .unwrap();
    assert_eq!(StatusCode::Ok, response.status().into());
    assert_eq!(&response.bytes().await.unwrap(), &b"success"[..]);

    let response = reqwest::get(format!("http://{}/empty", *TEST_ADDRESS))
        .await
        .unwrap();
    assert_eq!(StatusCode::Ok, response.status().into());

    let response = reqwest::get(format!("http://{}/fake", *TEST_ADDRESS))
        .await
        .unwrap();
    assert_eq!(StatusCode::NotFound, response.status().into());

    let response = reqwest::get(format!("http://{}/var/test", *TEST_ADDRESS))
        .await
        .unwrap();
    assert_eq!(StatusCode::Ok, response.status().into());
    assert_eq!(&response.bytes().await.unwrap(), &b"success test"[..]);

    let response = reqwest::get(format!("http://{}/query?name=west", *TEST_ADDRESS))
        .await
        .unwrap();
    assert_eq!(StatusCode::Ok, response.status().into());
    assert_eq!(&response.bytes().await.unwrap(), &b"success west"[..]);

    let response = reqwest::get(format!("http://{}/query/?name=east", *TEST_ADDRESS))
        .await
        .unwrap();
    assert_eq!(StatusCode::Ok, response.status().into());
    assert_eq!(&response.bytes().await.unwrap(), &b"success east"[..]);

    handle.abort();
}