actix_web_lab/
header.rs

1//! Experimental typed headers.
2
3pub use crate::{
4    cache_control::{CacheControl, CacheDirective},
5    content_length::ContentLength,
6    forwarded::Forwarded,
7    strict_transport_security::StrictTransportSecurity,
8    x_forwarded_prefix::{XForwardedPrefix, X_FORWARDED_PREFIX},
9};
10
11#[cfg(test)]
12mod header_test_helpers {
13    use std::fmt;
14
15    use actix_http::header::Header;
16    use actix_web::{test, HttpRequest};
17
18    fn req_from_raw_headers<H: Header, I: IntoIterator<Item = V>, V: AsRef<[u8]>>(
19        header_lines: I,
20    ) -> HttpRequest {
21        header_lines
22            .into_iter()
23            .fold(test::TestRequest::default(), |req, item| {
24                req.append_header((H::name(), item.as_ref().to_vec()))
25            })
26            .to_http_request()
27    }
28
29    #[track_caller]
30    pub(crate) fn assert_parse_eq<
31        H: Header + fmt::Debug + PartialEq,
32        I: IntoIterator<Item = V>,
33        V: AsRef<[u8]>,
34    >(
35        headers: I,
36        expect: H,
37    ) {
38        let req = req_from_raw_headers::<H, _, _>(headers);
39        assert_eq!(H::parse(&req).unwrap(), expect);
40    }
41
42    #[track_caller]
43    pub(crate) fn assert_parse_fail<
44        H: Header + fmt::Debug,
45        I: IntoIterator<Item = V>,
46        V: AsRef<[u8]>,
47    >(
48        headers: I,
49    ) {
50        let req = req_from_raw_headers::<H, _, _>(headers);
51        H::parse(&req).unwrap_err();
52    }
53}
54
55#[cfg(test)]
56pub(crate) use header_test_helpers::{assert_parse_eq, assert_parse_fail};