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}