From 3f931e84097b2beb5d9741ed7570b187185c8a45 Mon Sep 17 00:00:00 2001 From: "Javier E." Date: Thu, 30 Oct 2025 22:54:14 -0300 Subject: [PATCH] Add some functions to read/write request header for server functions (#4823) * Add some functions to read/write request header for server functions * Use LazyLock> to allow rewriting and clearing request headers. --- packages/fullstack/src/client.rs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/packages/fullstack/src/client.rs b/packages/fullstack/src/client.rs index c90a21184..20d63c5cc 100644 --- a/packages/fullstack/src/client.rs +++ b/packages/fullstack/src/client.rs @@ -9,7 +9,8 @@ use headers::{ContentType, Header}; use http::{response::Parts, Extensions, HeaderMap, HeaderName, HeaderValue, Method, StatusCode}; use send_wrapper::SendWrapper; use serde::{de::DeserializeOwned, Serialize}; -use std::{fmt::Display, pin::Pin, prelude::rust_2024::Future, sync::OnceLock}; +use std::sync::{LazyLock, Mutex, OnceLock}; +use std::{fmt::Display, pin::Pin, prelude::rust_2024::Future}; use url::Url; pub static GLOBAL_REQUEST_CLIENT: OnceLock = OnceLock::new(); @@ -49,10 +50,12 @@ impl ClientRequest { .parse() .unwrap(); + let headers = get_request_headers(); + ClientRequest { method, url, - headers: HeaderMap::new(), + headers, extensions: Extensions::new(), } } @@ -505,6 +508,23 @@ pub fn get_server_url() -> &'static str { static ROOT_URL: OnceLock<&'static str> = OnceLock::new(); +/// Delete the extra request headers for all servers functions. +pub fn clear_request_headers() { + REQUEST_HEADERS.lock().unwrap().clear(); +} + +/// Set the extra request headers for all servers functions. +pub fn set_request_headers(headers: HeaderMap) { + *REQUEST_HEADERS.lock().unwrap() = headers; +} + +/// Returns the extra request headers for all servers functions. +pub fn get_request_headers() -> HeaderMap { + REQUEST_HEADERS.lock().unwrap().clone() +} + +static REQUEST_HEADERS: LazyLock> = LazyLock::new(|| Mutex::new(HeaderMap::new())); + pub trait ClientResponseDriver { fn status(&self) -> StatusCode; fn headers(&self) -> &HeaderMap;