aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTeddy Wing2020-06-23 03:39:52 +0200
committerTeddy Wing2020-06-23 03:39:52 +0200
commitede3004cf563e4d46c0e8afa5fd1e18732de6c69 (patch)
tree9022deef9946430d4d9e4149db21efaed940d5ad /src
parent31c78b8655ed464c0575742b0f3f6c5daa179f97 (diff)
downloadfastcgi-conduit-ede3004cf563e4d46c0e8afa5fd1e18732de6c69.tar.bz2
From<fastcgi::Request>: Convert HTTP headers
The HTTP headers from `fastcgi` come with keys in the following format: "HTTP_USER_AGENT", "HTTP_ACCEPT_LANGUAGE". Since most headers use an uppercase first letter of a word with hyphen word separators, make the conversion by: 1. Removing the `HTTP_` prefix 2. Changing `_` to `-` 3. Making the first letter of each word uppercase using the Inflector crate
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs28
1 files changed, 26 insertions, 2 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 88752fb..975308a 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -5,6 +5,7 @@ use std::io::Write;
use http::{Request, Response};
use http::request;
+use inflector::cases::traincase::to_train_case;
pub fn run<F, T>(handler: F)
@@ -49,10 +50,33 @@ impl From<fastcgi::Request> for http::request::Builder {
request.param("REQUEST_URI").unwrap_or("".to_owned()),
);
- return http::request::Builder::new()
+ let mut http_request = http::request::Builder::new()
.method(&*method)
- .uri(&uri)
+ .uri(&uri);
+
+ let headers = headers_from_params(request.params());
+ for (k, v) in headers {
+ http_request = http_request.header(&k, &v);
+ }
+
+ http_request
// HTTP_* params become headers
}
}
+
+fn headers_from_params(params: fastcgi::Params) -> Vec<(String, String)> {
+ return params
+ .filter(|(key, _)| key.starts_with("HTTP_"))
+ .map(|(key, value)| {
+ let mut key = key.get(5..).unwrap_or("").to_owned();
+ key = key.replace("_", "-");
+ key = to_train_case(&key);
+
+ // Change _ to -
+ // Uppercase each word
+
+ (key, value)
+ })
+ .collect()
+}