use std::sync::LazyLock;
use axum::{Json, Router, extract::Path, routing::get};
use web_route::{ParameterizedRoute, WebRoute};
static ROUTE_WITH_PATH: LazyLock<ParameterizedRoute> =
LazyLock::new(|| ParameterizedRoute::new("/foo/{*path}"));
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
struct RouteParams {
path: WebRoute,
}
async fn route_handler(Path(params): Path<RouteParams>) -> Json<RouteParams> {
Json(params)
}
fn build_router() -> Router {
Router::new().route(&ROUTE_WITH_PATH, get(route_handler))
}
#[tokio::test]
async fn should_be_able_to_extract_a_web_route_with_axum_path_extractor() {
let path_params = RouteParams {
path: WebRoute::new("another/route"),
};
let test_server = axum_test::TestServer::new(build_router());
let response = test_server
.get(
&ROUTE_WITH_PATH.to_web_route(&path_params).unwrap(),
)
.await;
let parsed_body = response.json::<RouteParams>();
assert_eq!(parsed_body, path_params);
}