azure_core/policies/
timeout_policy.rs

1use crate::request_options::Timeout;
2use crate::{AppendToUrlQuery, Context, Policy, PolicyResult, Request};
3use std::sync::Arc;
4
5#[derive(Debug, Clone, Default)]
6pub struct TimeoutPolicy {
7    default_timeout: Option<Timeout>,
8}
9
10impl TimeoutPolicy {
11    pub fn new(default_timeout: Option<Timeout>) -> Self {
12        Self { default_timeout }
13    }
14}
15
16#[cfg_attr(target_arch = "wasm32", async_trait::async_trait(?Send))]
17#[cfg_attr(not(target_arch = "wasm32"), async_trait::async_trait)]
18impl Policy for TimeoutPolicy {
19    async fn send(
20        &self,
21        ctx: &Context,
22        request: &mut Request,
23        next: &[Arc<dyn Policy>],
24    ) -> PolicyResult {
25        let timeout = ctx.get::<Timeout>().or(self.default_timeout.as_ref());
26        timeout.append_to_url_query(request.url_mut());
27        next[0].send(ctx, request, &next[1..]).await
28    }
29}