persistent_scheduler/core/
retry.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Copy, Debug, Eq, PartialEq, Deserialize, Serialize)]
4pub enum RetryStrategy {
6 Linear { interval: u32 },
10
11 Exponential { base: u32 },
16}
17
18#[derive(Clone, Copy, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
19pub struct RetryPolicy {
21 pub strategy: RetryStrategy,
23
24 pub max_retries: Option<u32>, }
27
28impl RetryPolicy {
29 pub const fn linear(interval: u32, max_retries: Option<u32>) -> Self {
31 RetryPolicy {
32 strategy: RetryStrategy::Linear { interval },
33 max_retries,
34 }
35 }
36
37 pub const fn exponential(base: u32, max_retries: Option<u32>) -> Self {
39 RetryPolicy {
40 strategy: RetryStrategy::Exponential { base },
41 max_retries,
42 }
43 }
44
45 pub fn wait_time(&self, retry_count: u32) -> u32 {
46 match self.strategy {
47 RetryStrategy::Linear { interval } => interval,
48 RetryStrategy::Exponential { base } => base.saturating_pow(retry_count),
49 }
50 }
51}