From aa8b109668ab347d0cd1ed4fd1427c55a9875d6f Mon Sep 17 00:00:00 2001 From: Manuel Cillero Date: Sat, 4 Jul 2026 22:58:45 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Corrige=20orden=20de=20extractor?= =?UTF-8?q?es=20en=20handlers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `HttpRequest` vacía `parts.extensions` al extraerse; `Path` y otros extractores que dependen de ellas deben declararse antes en el handler. Corregido en el ejemplo hello-name y documentado en HttpRequest. --- examples/hello-name.rs | 2 +- src/web.rs | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/examples/hello-name.rs b/examples/hello-name.rs index 5ce79561..3e9de96b 100644 --- a/examples/hello-name.rs +++ b/examples/hello-name.rs @@ -9,8 +9,8 @@ impl Extension for HelloName { } async fn hello_name( - request: HttpRequest, web::Path(name): web::Path, + request: HttpRequest, ) -> Result { Page::new(request) .with_child(Html::with(move |_| { diff --git a/src/web.rs b/src/web.rs index 3705b9ae..19f62476 100644 --- a/src/web.rs +++ b/src/web.rs @@ -61,6 +61,26 @@ use std::task::{Context, Poll}; /// // ... /// } /// ``` +/// +/// # Orden de parámetros en el *handler* +/// +/// `HttpRequest` toma las extensiones de la petición al extraerse. Los extractores que leen de ahí +/// (como `Path` o `Extension`) deben aparecer **antes** en la lista de parámetros del +/// *handler*: +/// +/// ```rust,no_run +/// # use pagetop::prelude::*; +/// // Correcto: Path se declara antes que HttpRequest. +/// async fn view_post( +/// web::Path(id): web::Path, +/// request: HttpRequest, +/// ) -> Result { +/// # todo!() +/// } +/// ``` +/// +/// Los extractores que no dependen de las extensiones, como `Query` o `Method`, no están sujetos +/// a esta restricción. #[derive(Clone, Debug)] pub struct HttpRequest { uri: http::Uri,