Skip to content

Commit 6c6a329

Browse files
committed
feat(ext): introduce header casing public API
1 parent 32b76f4 commit 6c6a329

2 files changed

Lines changed: 18 additions & 13 deletions

File tree

src/ext/mod.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@
3535
//!
3636
//! See the documentation on each item for details about its usage and requirements.
3737
38-
#[cfg(all(any(feature = "client", feature = "server"), feature = "http1"))]
39-
use bytes::Bytes;
4038
#[cfg(any(
4139
all(any(feature = "client", feature = "server"), feature = "http1"),
4240
feature = "ffi"
@@ -158,7 +156,7 @@ impl fmt::Debug for Protocol {
158156
/// [`preserve_header_case`]: /client/struct.Client.html#method.preserve_header_case
159157
#[cfg(all(any(feature = "client", feature = "server"), feature = "http1"))]
160158
#[derive(Clone, Debug)]
161-
pub(crate) struct HeaderCaseMap(HeaderMap<Bytes>);
159+
pub(crate) struct HeaderCaseMap(HeaderMap<String>);
162160

163161
#[cfg(all(any(feature = "client", feature = "server"), feature = "http1"))]
164162
impl HeaderCaseMap {
@@ -175,7 +173,7 @@ impl HeaderCaseMap {
175173
/// Returns a view of all spellings associated with that header name,
176174
/// in the order they were found.
177175
#[cfg(any(feature = "client", feature = "server"))]
178-
pub(crate) fn get_all_internal(&self, name: &HeaderName) -> ValueIter<'_, Bytes> {
176+
pub(crate) fn get_all_internal(&self, name: &HeaderName) -> ValueIter<'_, String> {
179177
self.0.get_all(name).into_iter()
180178
}
181179

@@ -185,12 +183,12 @@ impl HeaderCaseMap {
185183
}
186184

187185
#[cfg(any(test, feature = "ffi"))]
188-
pub(crate) fn insert(&mut self, name: HeaderName, orig: Bytes) {
186+
pub(crate) fn insert(&mut self, name: HeaderName, orig: String) {
189187
self.0.insert(name, orig);
190188
}
191189

192190
#[cfg(any(feature = "client", feature = "server"))]
193-
pub(crate) fn append<N>(&mut self, name: N, orig: Bytes)
191+
pub(crate) fn append<N>(&mut self, name: N, orig: String)
194192
where
195193
N: IntoHeaderName,
196194
{

src/proto/h1/role.rs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,10 @@ impl Http1Transaction for Server {
313313
}
314314

315315
if let Some(ref mut header_case_map) = header_case_map {
316-
header_case_map.append(&name, slice.slice(header.name.0..header.name.1));
316+
header_case_map.append(
317+
&name,
318+
String::from_utf8(slice.slice(header.name.0..header.name.1).to_vec()).unwrap(),
319+
);
317320
}
318321

319322
#[cfg(feature = "ffi")]
@@ -567,7 +570,7 @@ impl Server {
567570
) -> crate::Result<Encoder> {
568571
struct OrigCaseWriter<'map> {
569572
map: &'map HeaderCaseMap,
570-
current: Option<(HeaderName, ValueIter<'map, Bytes>)>,
573+
current: Option<(HeaderName, ValueIter<'map, String>)>,
571574
title_case_headers: bool,
572575
}
573576

@@ -608,7 +611,7 @@ impl Server {
608611
current.get_or_insert_with(|| (name.clone(), map.get_all_internal(name)));
609612

610613
if let Some(orig_name) = values.next() {
611-
extend(dst, orig_name);
614+
extend(dst, orig_name.as_bytes());
612615
} else if title_case_headers {
613616
title_case(dst, name.as_str().as_bytes());
614617
} else {
@@ -1104,7 +1107,11 @@ impl Http1Transaction for Client {
11041107
}
11051108

11061109
if let Some(ref mut header_case_map) = header_case_map {
1107-
header_case_map.append(&name, slice.slice(header.name.0..header.name.1));
1110+
header_case_map.append(
1111+
&name,
1112+
String::from_utf8(slice.slice(header.name.0..header.name.1).to_vec())
1113+
.unwrap(),
1114+
);
11081115
}
11091116

11101117
#[cfg(feature = "ffi")]
@@ -2895,7 +2902,7 @@ mod tests {
28952902
let name = http::header::HeaderName::from_static("x-empty");
28962903
headers.insert(&name, "".parse().expect("parse empty"));
28972904
let mut orig_cases = HeaderCaseMap::default();
2898-
orig_cases.insert(name, Bytes::from_static(b"X-EmptY"));
2905+
orig_cases.insert(name, String::from("X-EmptY"));
28992906

29002907
let mut dst = Vec::new();
29012908
super::write_headers_original_case(&headers, &orig_cases, &mut dst, false);
@@ -2914,8 +2921,8 @@ mod tests {
29142921
headers.append(&name, "b".parse().unwrap());
29152922

29162923
let mut orig_cases = HeaderCaseMap::default();
2917-
orig_cases.insert(name.clone(), Bytes::from_static(b"X-Empty"));
2918-
orig_cases.append(name, Bytes::from_static(b"X-EMPTY"));
2924+
orig_cases.insert(name.clone(), String::from("X-Empty"));
2925+
orig_cases.append(name, String::from("X-EMPTY"));
29192926

29202927
let mut dst = Vec::new();
29212928
super::write_headers_original_case(&headers, &orig_cases, &mut dst, false);

0 commit comments

Comments
 (0)