#![deny(clippy::all)]
use axum::{
Router,
extract::Path,
http::{HeaderValue, StatusCode, header},
response::{IntoResponse, Response},
routing::get,
};
use std::net::SocketAddr;
use tokio::net::TcpListener;
async fn users(Path(_id): Path<String>) -> Response {
let body = serde_json::json!({"error": "user not found"});
let mut resp = (StatusCode::NOT_FOUND, axum::Json(body)).into_response();
resp.headers_mut().insert(
header::CONTENT_TYPE,
HeaderValue::from_static("application/json"),
);
resp.headers_mut().insert(
"x-request-id",
HeaderValue::from_static("req_test123"),
);
resp
}
fn router() -> Router {
Router::new().route("/api/users/{id}", get(users))
}
pub async fn spawn() -> SocketAddr {
let listener = TcpListener::bind("127.0.0.1:0")
.await
.expect("failed to bind test server listener");
let addr = listener
.local_addr()
.expect("failed to read local_addr from listener");
tokio::spawn(async move {
axum::serve(listener, router())
.await
.expect("test server failed");
});
addr
}