Skip to content

Commit 660c4be

Browse files
committed
Implement conversion from HashMaps of any type, not just str
See: #326 (comment)
1 parent b76d702 commit 660c4be

File tree

3 files changed

+21
-5
lines changed

3 files changed

+21
-5
lines changed

src/header/map.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use super::HeaderValue;
22
use super::name::{HeaderName, HdrName, InvalidHeaderName};
3-
use convert::HttpTryFrom;
3+
use convert::{HttpTryFrom, HttpTryInto};
44
use Error;
55
use sealed::Sealed;
66

@@ -1747,16 +1747,16 @@ impl<T> Sealed for HeaderMap<T> {}
17471747
impl<COLLECTION, K, V> HttpTryFrom<COLLECTION> for HeaderMap<HeaderValue>
17481748
where
17491749
COLLECTION: IntoIterator<Item=(K, V)>,
1750-
K: AsRef<str>,
1751-
V: AsRef<str>
1750+
HeaderName: HttpTryFrom<K>,
1751+
HeaderValue: HttpTryFrom<V>
17521752
{
17531753
type Error = Error;
17541754

17551755
fn try_from(c: COLLECTION) -> Result<Self, Self::Error> {
17561756
c.into_iter()
17571757
.map(|(k, v)| -> ::Result<(HeaderName, HeaderValue)> {
1758-
let name = k.as_ref().parse()?;
1759-
let value = v.as_ref().parse()?;
1758+
let name : HeaderName = k.http_try_into()?;
1759+
let value : HeaderValue = v.http_try_into()?;
17601760
Ok((name, value))
17611761
})
17621762
.collect()

src/header/name.rs

+8
Original file line numberDiff line numberDiff line change
@@ -1772,6 +1772,14 @@ impl<'a> HttpTryFrom<&'a str> for HeaderName {
17721772
}
17731773
}
17741774

1775+
impl<'a> HttpTryFrom<&'a String> for HeaderName {
1776+
type Error = InvalidHeaderName;
1777+
#[inline]
1778+
fn try_from(s: &'a String) -> Result<Self, Self::Error> {
1779+
Self::from_bytes(s.as_bytes())
1780+
}
1781+
}
1782+
17751783
impl<'a> HttpTryFrom<&'a [u8]> for HeaderName {
17761784
type Error = InvalidHeaderName;
17771785
#[inline]

src/header/value.rs

+8
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,14 @@ impl<'a> HttpTryFrom<&'a str> for HeaderValue {
521521
}
522522
}
523523

524+
impl<'a> HttpTryFrom<&'a String> for HeaderValue {
525+
type Error = InvalidHeaderValue;
526+
#[inline]
527+
fn try_from(s: &'a String) -> Result<Self, Self::Error> {
528+
Self::from_bytes(s.as_bytes())
529+
}
530+
}
531+
524532
impl<'a> HttpTryFrom<&'a [u8]> for HeaderValue {
525533
type Error = InvalidHeaderValue;
526534

0 commit comments

Comments
 (0)