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