From 6dbf5b5438edffeb7b21c96a192bdde86c68acfc Mon Sep 17 00:00:00 2001 From: Florian Briand Date: Mon, 19 Aug 2024 19:34:12 +0200 Subject: [PATCH] feat: Add HX-Request header extraction to CPS endpoint --- crates/app/src/pages/cps.rs | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/crates/app/src/pages/cps.rs b/crates/app/src/pages/cps.rs index bee64c5..7927e7b 100644 --- a/crates/app/src/pages/cps.rs +++ b/crates/app/src/pages/cps.rs @@ -1,9 +1,34 @@ use askama_axum::Template; +use axum::{ + async_trait, + extract::FromRequestParts, + http::{request::Parts, HeaderMap, StatusCode}, +}; #[derive(Template)] #[template(path = "pages/cps.html")] pub struct CpsTemplate; -pub async fn cps() -> CpsTemplate { +pub struct ExtractHxRequest(bool); + +#[async_trait] +impl FromRequestParts for ExtractHxRequest +where + S: Send + Sync, +{ + type Rejection = (StatusCode, &'static str); + + async fn from_request_parts(parts: &mut Parts, _state: &S) -> Result { + if parts.headers.get("HX-Request").is_some() { + Ok(ExtractHxRequest(true)) + } else { + Ok(ExtractHxRequest(false)) + } + } +} + +pub async fn cps(headers: HeaderMap, hx_request: ExtractHxRequest) -> CpsTemplate { + println!("{:#?}", headers); + println!("{:#?}", hx_request.0); CpsTemplate }