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