kutil_http/cache/axum/
headers.rs1use 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
12pub trait Headers<IntoResponseT>: Sized
18where
19 IntoResponseT: IntoResponse,
20{
21 fn do_not_encode(self) -> Response {
23 self.set_header_bool(XX_ENCODE, false)
24 }
25
26 fn do_not_cache(self) -> Response {
28 self.set_header_bool(XX_CACHE, false)
29 }
30
31 fn with_duration(self, duration: Duration) -> Response;
33
34 fn with_duration_str(self, duration: &str) -> Result<Response, InvalidHeaderValue>;
36
37 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}