azure_core/policies/
custom_headers_policy.rs
1use crate::{
2 headers::Headers,
3 policies::{Policy, PolicyResult},
4 Context, Request,
5};
6use std::sync::Arc;
7use tracing::trace;
8
9#[derive(Debug, Clone)]
10pub struct CustomHeaders(Headers);
11
12impl From<Headers> for CustomHeaders {
13 fn from(h: Headers) -> Self {
14 Self(h)
15 }
16}
17
18#[derive(Clone, Debug, Default)]
19pub struct CustomHeadersPolicy {}
20
21#[cfg_attr(target_arch = "wasm32", async_trait::async_trait(?Send))]
22#[cfg_attr(not(target_arch = "wasm32"), async_trait::async_trait)]
23impl Policy for CustomHeadersPolicy {
24 async fn send(
25 &self,
26 ctx: &Context,
27 request: &mut Request,
28 next: &[Arc<dyn Policy>],
29 ) -> PolicyResult {
30 if let Some(CustomHeaders(custom_headers)) = ctx.get::<CustomHeaders>() {
31 custom_headers
32 .iter()
33 .for_each(|(header_name, header_value)| {
34 trace!(
35 "injecting custom context header {:?} with value {:?}",
36 header_name,
37 header_value
38 );
39 request.insert_header(header_name.clone(), header_value.clone());
40 });
41 }
42
43 next[0].send(ctx, request, &next[1..]).await
44 }
45}