aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.rs')
-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()
+}