Skip to content

Commit ee6dc33

Browse files
committed
Preserve inner error type
1 parent 88179ba commit ee6dc33

File tree

2 files changed

+12
-10
lines changed

2 files changed

+12
-10
lines changed

Sources/Retry/Retry.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ import Foundation
1616

1717

1818
public enum Retry {
19-
public enum Error: Swift.Error, Equatable {
20-
case retryLimitExceeded(lastError: String?)
19+
public enum Error: Swift.Error {
20+
case retryLimitExceeded(lastError: Swift.Error?)
2121
}
2222

2323
public static func backedOffDelay(baseDelay: Double, attempt: Int) -> UInt32 {
@@ -32,7 +32,7 @@ public enum Retry {
3232
_ block: () throws -> T) throws -> T {
3333
var retriesLeft = retries
3434
var currentTry = 1
35-
var lastError: String?
35+
var lastError: Swift.Error?
3636
while true {
3737
if currentTry > 1 {
3838
logger.onStartOfRetry(label: label, attempt: currentTry)
@@ -41,7 +41,7 @@ public enum Retry {
4141
return try block()
4242
} catch {
4343
logger.onError(label: label, error: error)
44-
lastError = "\(error)"
44+
lastError = error
4545
guard retriesLeft > 0 else { break }
4646
let delay = backedOffDelay(baseDelay: delay, attempt: currentTry)
4747
logger.onStartOfDelay(label: label, delay: Double(delay))
@@ -61,7 +61,7 @@ public enum Retry {
6161
_ block: () async throws -> T) async throws -> T {
6262
var retriesLeft = retries
6363
var currentTry = 1
64-
var lastError: String?
64+
var lastError: Swift.Error?
6565
while true {
6666
if currentTry > 1 {
6767
logger.onStartOfRetry(label: label, attempt: currentTry)
@@ -70,7 +70,7 @@ public enum Retry {
7070
return try await block()
7171
} catch {
7272
logger.onError(label: label, error: error)
73-
lastError = "\(error)"
73+
lastError = error
7474
guard retriesLeft > 0 else { break }
7575
let delay = backedOffDelay(baseDelay: delay, attempt: currentTry)
7676
logger.onStartOfDelay(label: label, delay: Double(delay))

Tests/RetryTests/RetryTests.swift

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,16 @@ final class RetryTests: XCTestCase {
6060
}
6161

6262
// MUT
63-
XCTAssertThrowsError(
63+
do {
6464
try Retry.attempt("", delay: 0, retries: 3) {
6565
called += 1
6666
throw Error()
6767
}
68-
69-
) { error in
70-
XCTAssertEqual(error as? Retry.Error, .retryLimitExceeded(lastError: "test error"))
68+
XCTFail("expected an error to be thrown")
69+
} catch let Retry.Error.retryLimitExceeded(lastError: .some(error)) {
70+
XCTAssertEqual("\(error)", "test error")
71+
} catch {
72+
XCTFail("unexpected error: \(error)")
7173
}
7274

7375
// validation

0 commit comments

Comments
 (0)