Skip to content

Commit a3af23f

Browse files
avoid exposing Headers
1 parent 0c4d913 commit a3af23f

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

src/headers/mod.rs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ pub use to_header_values::ToHeaderValues;
2828
pub use values::Values;
2929

3030
/// A collection of HTTP Headers.
31-
#[derive(Debug, Clone)]
31+
#[derive(Debug)]
3232
pub struct Headers {
3333
headers: HashMap<HeaderName, Vec<HeaderValue>>,
3434
}
@@ -144,6 +144,25 @@ impl<'a> IntoIterator for &'a mut Headers {
144144
}
145145
}
146146

147+
impl std::iter::FromIterator<(HeaderName, Vec<HeaderValue>)> for Headers {
148+
fn from_iter<I: IntoIterator<Item = (HeaderName, Vec<HeaderValue>)>>(iter: I) -> Self {
149+
Headers {
150+
headers: iter.into_iter().collect(),
151+
}
152+
}
153+
}
154+
155+
impl<'a> std::iter::FromIterator<(&'a HeaderName, &'a Vec<HeaderValue>)> for Headers {
156+
fn from_iter<I: IntoIterator<Item = (&'a HeaderName, &'a Vec<HeaderValue>)>>(iter: I) -> Self {
157+
Headers {
158+
headers: iter
159+
.into_iter()
160+
.map(|(name, values)| (name.clone(), values.clone()))
161+
.collect(),
162+
}
163+
}
164+
}
165+
147166
#[cfg(test)]
148167
mod tests {
149168
use super::*;

src/request.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,11 @@ impl Request {
5555
}
5656

5757
/// Set the headers.
58-
pub fn set_headers(&mut self, headers: Headers) {
59-
self.headers = headers;
58+
pub fn set_headers<'a, T: IntoIterator<Item = (&'a HeaderName, &'a Vec<HeaderValue>)>>(
59+
&mut self,
60+
headers: T,
61+
) {
62+
self.headers = headers.into_iter().collect();
6063
}
6164

6265
/// Get a reference to the url.

0 commit comments

Comments
 (0)