headers/common/
access_control_request_headers.rs1use std::iter::FromIterator;
2
3use util::FlatCsv;
4use {HeaderName, HeaderValue};
5
6#[derive(Clone, Debug)]
37pub struct AccessControlRequestHeaders(FlatCsv);
38
39derive_header! {
40 AccessControlRequestHeaders(_),
41 name: ACCESS_CONTROL_REQUEST_HEADERS
42}
43
44impl AccessControlRequestHeaders {
45 pub fn iter<'a>(&'a self) -> impl Iterator<Item = HeaderName> + 'a {
47 self.0.iter().filter_map(|s| s.parse().ok())
48 }
49}
50
51impl FromIterator<HeaderName> for AccessControlRequestHeaders {
52 fn from_iter<I>(iter: I) -> Self
53 where
54 I: IntoIterator<Item = HeaderName>,
55 {
56 let flat = iter.into_iter().map(HeaderValue::from).collect();
57 AccessControlRequestHeaders(flat)
58 }
59}
60
61#[cfg(test)]
62mod tests {
63 use super::super::{test_decode, test_encode};
64 use super::*;
65
66 #[test]
67 fn iter() {
68 let req_headers = test_decode::<AccessControlRequestHeaders>(&["foo, bar"]).unwrap();
69
70 let as_vec = req_headers.iter().collect::<Vec<_>>();
71 assert_eq!(as_vec.len(), 2);
72 assert_eq!(as_vec[0], "foo");
73 assert_eq!(as_vec[1], "bar");
74 }
75
76 #[test]
77 fn from_iter() {
78 let req_headers: AccessControlRequestHeaders =
79 vec![::http::header::CACHE_CONTROL, ::http::header::IF_RANGE]
80 .into_iter()
81 .collect();
82
83 let headers = test_encode(req_headers);
84 assert_eq!(
85 headers["access-control-request-headers"],
86 "cache-control, if-range"
87 );
88 }
89}