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<Mutex<_>> to allow rewriting and clearing request headers.
This commit is contained in:
Javier E. authored and GitHub committed 2025-10-30 18:54:14 -07:00
1 parent ee1719af92
commit 3f931e8409
1 file changed
+22 -2
+22 -2
View File
@@ -9,7 +9,8 @@ use headers::{ContentType, Header};
use http::{response::Parts, Extensions, HeaderMap, HeaderName, HeaderValue, Method, StatusCode}; use http::{response::Parts, Extensions, HeaderMap, HeaderName, HeaderValue, Method, StatusCode};
use send_wrapper::SendWrapper; use send_wrapper::SendWrapper;
use serde::{de::DeserializeOwned, Serialize}; 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; use url::Url;
pub static GLOBAL_REQUEST_CLIENT: OnceLock<reqwest::Client> = OnceLock::new(); pub static GLOBAL_REQUEST_CLIENT: OnceLock<reqwest::Client> = OnceLock::new();
@@ -49,10 +50,12 @@ impl ClientRequest {
.parse() .parse()
.unwrap(); .unwrap();
let headers = get_request_headers();
ClientRequest { ClientRequest {
method, method,
url, url,
headers: HeaderMap::new(), headers,
extensions: Extensions::new(), extensions: Extensions::new(),
} }
} }
@@ -505,6 +508,23 @@ pub fn get_server_url() -> &'static str {
static ROOT_URL: OnceLock<&'static str> = OnceLock::new(); 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<Mutex<HeaderMap>> = LazyLock::new(|| Mutex::new(HeaderMap::new()));
pub trait ClientResponseDriver { pub trait ClientResponseDriver {
fn status(&self) -> StatusCode; fn status(&self) -> StatusCode;
fn headers(&self) -> &HeaderMap; fn headers(&self) -> &HeaderMap;