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}