@@ -27,6 +27,17 @@ public enum RetryPolicyStrategy: Sendable {
2727 /// the linear backoff interval.
2828 case linear( retry: UInt , duration: DispatchTimeInterval )
2929
30+ /// A retry strategy with a Fibonacci-based delay progression.
31+ ///
32+ /// The delay grows according to the Fibonacci sequence:
33+ /// `duration * fibonacci(retryIndex + 1)`.
34+ ///
35+ /// - Parameters:
36+ /// - retry: The maximum number of retry attempts.
37+ /// - duration: The base delay used to calculate
38+ /// the Fibonacci backoff interval.
39+ case fibonacci( retry: UInt , duration: DispatchTimeInterval )
40+
3041 /// A retry strategy with exponential increase in duration between retries and added jitter.
3142 ///
3243 /// - Parameters:
@@ -52,6 +63,8 @@ public enum RetryPolicyStrategy: Sendable {
5263 retry
5364 case let . linear( retry, _) :
5465 retry
66+ case let . fibonacci( retry, _) :
67+ retry
5568 }
5669 }
5770
@@ -64,6 +77,8 @@ public enum RetryPolicyStrategy: Sendable {
6477 duration
6578 case let . linear( _, duration) :
6679 duration
80+ case let . fibonacci( _, duration) :
81+ duration
6782 }
6883 }
6984}
@@ -82,6 +97,8 @@ extension RetryPolicyStrategy {
8297 ConstantDelayStrategy ( duration: duration)
8398 case let . linear( _, duration) :
8499 LinearDelayStrategy ( duration: duration)
100+ case let . fibonacci( _, duration) :
101+ FibonacciDelayStrategy ( duration: duration)
85102 }
86103 }
87104}
0 commit comments