1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
use std::io;
use std::iter;
use std::option;
use std::slice;
use crate::headers::{HeaderValue, HeaderValues, Values};
pub trait ToHeaderValues {
type Iter: Iterator<Item = HeaderValue>;
fn to_header_values(&self) -> crate::Result<Self::Iter>;
}
impl ToHeaderValues for HeaderValue {
type Iter = option::IntoIter<HeaderValue>;
fn to_header_values(&self) -> crate::Result<Self::Iter> {
Ok(Some(self.clone()).into_iter())
}
}
impl<'a> ToHeaderValues for &'a HeaderValues {
type Iter = iter::Cloned<Values<'a>>;
fn to_header_values(&self) -> crate::Result<Self::Iter> {
Ok(self.iter().cloned())
}
}
impl<'a> ToHeaderValues for &'a [HeaderValue] {
type Iter = iter::Cloned<slice::Iter<'a, HeaderValue>>;
fn to_header_values(&self) -> crate::Result<Self::Iter> {
Ok(self.iter().cloned())
}
}
impl<'a> ToHeaderValues for &'a str {
type Iter = option::IntoIter<HeaderValue>;
fn to_header_values(&self) -> crate::Result<Self::Iter> {
let value = self
.parse()
.map_err(|err| io::Error::new(io::ErrorKind::Other, err))?;
Ok(Some(value).into_iter())
}
}
impl ToHeaderValues for String {
type Iter = option::IntoIter<HeaderValue>;
fn to_header_values(&self) -> crate::Result<Self::Iter> {
let value = self
.parse()
.map_err(|err| io::Error::new(io::ErrorKind::Other, err))?;
Ok(Some(value).into_iter())
}
}