pub struct Path<T>(pub T);Expand description
Extractor that will get captures from the URL and parse them using
serde.
Any percent encoded parameters will be automatically decoded. The decoded
parameters must be valid UTF-8, otherwise Path will fail and return a 400 Bad Request response.
§Example
These examples assume the serde feature of the uuid crate is enabled.
use axum::{
    extract::Path,
    routing::get,
    Router,
};
use uuid::Uuid;
async fn users_teams_show(
    Path((user_id, team_id)): Path<(Uuid, Uuid)>,
) {
    // ...
}
let app = Router::new().route("/users/:user_id/team/:team_id", get(users_teams_show));If the path contains only one parameter, then you can omit the tuple.
use axum::{
    extract::Path,
    routing::get,
    Router,
};
use uuid::Uuid;
async fn user_info(Path(user_id): Path<Uuid>) {
    // ...
}
let app = Router::new().route("/users/:user_id", get(user_info));Path segments also can be deserialized into any type that implements
serde::Deserialize. This includes tuples and structs:
use axum::{
    extract::Path,
    routing::get,
    Router,
};
use serde::Deserialize;
use uuid::Uuid;
// Path segment labels will be matched with struct field names
#[derive(Deserialize)]
struct Params {
    user_id: Uuid,
    team_id: Uuid,
}
async fn users_teams_show(
    Path(Params { user_id, team_id }): Path<Params>,
) {
    // ...
}
// When using tuples the path segments will be matched by their position in the route
async fn users_teams_create(
    Path((user_id, team_id)): Path<(String, String)>,
) {
    // ...
}
let app = Router::new().route(
    "/users/:user_id/team/:team_id",
    get(users_teams_show).post(users_teams_create),
);If you wish to capture all path parameters you can use HashMap or Vec:
use axum::{
    extract::Path,
    routing::get,
    Router,
};
use std::collections::HashMap;
async fn params_map(
    Path(params): Path<HashMap<String, String>>,
) {
    // ...
}
async fn params_vec(
    Path(params): Path<Vec<(String, String)>>,
) {
    // ...
}
let app = Router::new()
    .route("/users/:user_id/team/:team_id", get(params_map).post(params_vec));§Providing detailed rejection output
If the URI cannot be deserialized into the target type the request will be rejected and an
error response will be returned. See customize-path-rejection for an example of how to customize that error.
Tuple Fields§
§0: T