satex_layer/
set_header.rs1#![doc = include_str!("../docs/set_request_header.md")]
2#![doc = include_str!("../docs/set_response_header.md")]
3
4pub use request::MakeSetRequestHeaderRouteLayer;
5pub use response::MakeSetResponseHeaderRouteLayer;
6
7macro_rules! make_set_header {
8 ($name:ident, $make:ident, $layer:ident) => {
9 #[make(kind = $name)]
10 pub struct $make {
11 name: String,
12 value: String,
13 #[serde(default)]
14 policy: SetPolicy,
15 }
16
17 impl MakeRouteLayer for $make {
18 type Layer = $layer<HeaderValue>;
19
20 fn make(&self, args: Args) -> Result<Self::Layer, Error> {
21 let config = Config::with_args(args).map_err(Error::new)?;
22 let name = HeaderName::from_str(&config.name).map_err(Error::new)?;
23 let value = HeaderValue::from_str(&config.value).map_err(Error::new)?;
24 Ok(match config.policy {
25 SetPolicy::Overriding => $layer::overriding(name, value),
26 SetPolicy::Appending => $layer::appending(name, value),
27 SetPolicy::IfNotPresent => $layer::if_not_present(name, value),
28 })
29 }
30 }
31 };
32}
33
34mod request {
35 use crate::make::MakeRouteLayer;
36 use crate::util::SetPolicy;
37 use http::{HeaderName, HeaderValue};
38 use satex_core::component::{Args, Configurable};
39 use satex_core::Error;
40 use satex_macro::make;
41 use std::str::FromStr;
42 use tower_http::set_header::SetRequestHeaderLayer;
43
44 make_set_header!(
45 SetRequestHeader,
46 MakeSetRequestHeaderRouteLayer,
47 SetRequestHeaderLayer
48 );
49}
50
51mod response {
52 use crate::make::MakeRouteLayer;
53 use crate::util::SetPolicy;
54 use http::{HeaderName, HeaderValue};
55 use satex_core::component::{Args, Configurable};
56 use satex_core::Error;
57 use satex_macro::make;
58 use std::str::FromStr;
59 use tower_http::set_header::SetResponseHeaderLayer;
60
61 make_set_header!(
62 SetResponseHeader,
63 MakeSetResponseHeaderRouteLayer,
64 SetResponseHeaderLayer
65 );
66}