tower_async_http/cors/
vary.rs1use std::array;
2
3use http::{header::HeaderName, HeaderValue};
4
5use super::preflight_request_headers;
6
7#[derive(Clone, Debug)]
14pub struct Vary(Vec<HeaderValue>);
15
16impl Vary {
17 pub fn list<I>(headers: I) -> Self
23 where
24 I: IntoIterator<Item = HeaderName>,
25 {
26 Self(headers.into_iter().map(Into::into).collect())
27 }
28
29 pub(super) fn values(&self) -> impl Iterator<Item = HeaderValue> + '_ {
30 self.0.iter().cloned()
31 }
32}
33
34impl Default for Vary {
35 fn default() -> Self {
36 Self::list(preflight_request_headers())
37 }
38}
39
40impl<const N: usize> From<[HeaderName; N]> for Vary {
41 fn from(arr: [HeaderName; N]) -> Self {
42 #[allow(deprecated)] Self::list(array::IntoIter::new(arr))
44 }
45}
46
47impl From<Vec<HeaderName>> for Vary {
48 fn from(vec: Vec<HeaderName>) -> Self {
49 Self::list(vec)
50 }
51}