kutil_http/cache/axum/
headers.rs

1use super::super::super::headers::*;
2
3use {
4    axum::{
5        http::header::*,
6        response::{IntoResponse, Response},
7    },
8    duration_str::*,
9    std::{result::Result, time::*},
10};
11
12//
13// Headers
14//
15
16/// Headers.
17pub trait Headers<IntoResponseT>: Sized
18where
19    IntoResponseT: IntoResponse,
20{
21    /// Set `XX-Encode` header to "false".
22    fn do_not_encode(self) -> Response {
23        self.set_header_bool(XX_ENCODE, false)
24    }
25
26    /// Set `XX-Cache` header to "false".
27    fn do_not_cache(self) -> Response {
28        self.set_header_bool(XX_CACHE, false)
29    }
30
31    /// Set `XX-Cache-Duration` header.
32    fn with_duration(self, duration: Duration) -> Response;
33
34    /// Set `XX-Cache-Duration` header.
35    fn with_duration_str(self, duration: &str) -> Result<Response, InvalidHeaderValue>;
36
37    /// Set a header to a boolean value.
38    fn set_header_bool(self, name: HeaderName, value: bool) -> Response;
39}
40
41impl<IntoResponseT> Headers<IntoResponseT> for IntoResponseT
42where
43    IntoResponseT: IntoResponse,
44{
45    fn with_duration(self, duration: Duration) -> Response {
46        let mut response = self.into_response();
47        let headers = response.headers_mut();
48        headers.remove(XX_CACHE_DURATION);
49        let duration = HeaderValue::from_str(duration.human_format().as_str())
50            .expect("duration_str::HumanFormat should not return an invalid string");
51        headers.set_into_header_value(XX_CACHE_DURATION, duration);
52        response
53    }
54
55    fn with_duration_str(self, duration: &str) -> Result<Response, InvalidHeaderValue> {
56        let mut response = self.into_response();
57        let headers = response.headers_mut();
58        headers.set_string_value(XX_CACHE_DURATION, duration)?;
59        Ok(response)
60    }
61
62    fn set_header_bool(self, name: HeaderName, value: bool) -> Response {
63        let mut response = self.into_response();
64        response.headers_mut().set_bool_value(name, value);
65        response
66    }
67}