diff --git a/packages/fullstack/src/client.rs b/packages/fullstack/src/client.rs index 8f4a69aaef..c11d953bb8 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(), } } @@ -499,6 +502,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;