qiniu_http_client/client/backoff/
fixed.rs

1use super::{Backoff, BackoffOptions, GotBackoffDuration};
2use qiniu_http::RequestParts as HttpRequestParts;
3use std::time::Duration;
4
5/// 无退避的退避时长提供者
6pub const NO_BACKOFF: FixedBackoff = FixedBackoff::new(Duration::from_nanos(0));
7
8/// 固定时长的退避时长提供者
9///
10/// 默认时长为 100 毫秒
11#[derive(Debug, Clone, PartialEq, Eq)]
12pub struct FixedBackoff {
13    delay: Duration,
14}
15
16impl FixedBackoff {
17    /// 创建固定时长的退避时长提供者
18    #[inline]
19    pub const fn new(delay: Duration) -> Self {
20        Self { delay }
21    }
22
23    /// 获取固定时长
24    #[inline]
25    pub const fn delay(&self) -> Duration {
26        self.delay
27    }
28}
29
30impl Backoff for FixedBackoff {
31    #[inline]
32    fn time(&self, _request: &mut HttpRequestParts, _opts: BackoffOptions) -> GotBackoffDuration {
33        self.delay.into()
34    }
35}
36
37impl Default for FixedBackoff {
38    #[inline]
39    fn default() -> Self {
40        FixedBackoff::new(Duration::from_millis(100))
41    }
42}