【Rust】axumでcookieを取得する

routeにmiddlewareをくっつけます。
Requestのheadersからcookieを取得します。

#[tokio::main]
async fn main() {
    let app = axum::Router::new()
        .route("/", axum::routing::get(handle_index))
        .layer(middleware::from_fn(my_middleware));

    let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
    axum::serve(listener, app).await.unwrap();
}
//
async fn my_middleware(req: Request,
    next: Next,) -> impl IntoResponse {

    let mut session_token = req
        .headers()
        .get_all("Cookie")
        .iter()
        .filter_map(|cookie| {
            cookie
                .to_str()
                .ok()
                .and_then(|cookie| cookie.parse::<cookie::Cookie>().ok())
        })
        .find_map(|cookie| {
            (cookie.name() == "hoge".to_string()).then(move || cookie.value().to_owned())
        });
    println!("{:?}", &session_token);

    let cookies = req.headers().get("cookie");
    println!("{:?}", &cookies);

    let mut res = next.run(req).await;
    res
}

Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.60s
Running `target/debug/axum`
Some(“value”)
Some(“hoge=value”)
hoge=value; Max-Age=600

ほう、なるほど。middlewareにリダイレクトを追加したい。