Skip to content

Commit 09538a5

Browse files
authored
clean up and preconditions (#2)
1 parent f8cb3cd commit 09538a5

File tree

2 files changed

+16
-10
lines changed

2 files changed

+16
-10
lines changed

Sources/AsyncAlgorithms/Retry/Backoff.swift

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public protocol BackoffStrategy<Duration> {
2121
struct ConstantBackoffStrategy<Duration: DurationProtocol>: BackoffStrategy {
2222
@usableFromInline let constant: Duration
2323
@usableFromInline init(constant: Duration) {
24+
precondition(constant >= .zero, "Constsnt must be greater than or equal to 0")
2425
self.constant = constant
2526
}
2627
@inlinable func nextDuration() -> Duration {
@@ -32,8 +33,10 @@ struct ConstantBackoffStrategy<Duration: DurationProtocol>: BackoffStrategy {
3233
@usableFromInline
3334
struct LinearBackoffStrategy<Duration: DurationProtocol>: BackoffStrategy {
3435
@usableFromInline var current: Duration
35-
@usableFromInline var increment: Duration
36+
@usableFromInline let increment: Duration
3637
@usableFromInline init(increment: Duration, initial: Duration) {
38+
precondition(initial >= .zero, "Initial must be greater than or equal to 0")
39+
precondition(increment >= .zero, "Increment must be greater than or equal to 0")
3740
self.current = initial
3841
self.increment = increment
3942
}
@@ -48,6 +51,8 @@ struct LinearBackoffStrategy<Duration: DurationProtocol>: BackoffStrategy {
4851
@usableFromInline var current: Duration
4952
@usableFromInline let factor: Int
5053
@usableFromInline init(factor: Int, initial: Duration) {
54+
precondition(initial >= .zero, "Initial must be greater than or equal to 0")
55+
precondition(factor >= 1, "Factor must be greater than or equal to 1")
5156
self.current = initial
5257
self.factor = factor
5358
}
@@ -109,8 +114,8 @@ struct EqualJitterBackoffStrategy<Base: BackoffStrategy, RNG: RandomNumberGenera
109114
self.generator = generator
110115
}
111116
@inlinable mutating func nextDuration() -> Base.Duration {
112-
let halfBase = (base.nextDuration() / 2).attoseconds
113-
return .init(attoseconds: halfBase + Int128.random(in: 0...halfBase, using: &generator))
117+
let base = base.nextDuration()
118+
return .init(attoseconds: Int128.random(in: (base / 2).attoseconds...base.attoseconds, using: &generator))
114119
}
115120
}
116121

@@ -122,6 +127,7 @@ struct DecorrelatedJitterBackoffStrategy<Base: BackoffStrategy, RNG: RandomNumbe
122127
@usableFromInline var current: Duration?
123128
@usableFromInline let factor: Int
124129
@usableFromInline init(base: Base, generator: RNG, factor: Int) {
130+
precondition(factor >= 1, "Factor must be greater than or equal to 1")
125131
self.base = base
126132
self.generator = generator
127133
self.factor = factor

Sources/AsyncAlgorithms/Retry/Retry.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
@available(iOS 16.0, macCatalyst 16.0, macOS 13.0, tvOS 16.0, visionOS 1.0, watchOS 9.0, *)
22
public struct RetryStrategy<Duration: DurationProtocol> {
3-
enum Strategy {
3+
@usableFromInline enum Strategy {
44
case backoff(Duration)
55
case stop
66
}
7-
8-
let strategy: Strategy
9-
10-
public static var stop: Self {
7+
@usableFromInline let strategy: Strategy
8+
@usableFromInline init(strategy: Strategy) {
9+
self.strategy = strategy
10+
}
11+
@inlinable public static var stop: Self {
1112
return .init(strategy: .stop)
1213
}
13-
14-
public static func backoff(_ duration: Duration) -> Self {
14+
@inlinable public static func backoff(_ duration: Duration) -> Self {
1515
return .init(strategy: .backoff(duration))
1616
}
1717
}

0 commit comments

Comments
 (0)