@@ -16,8 +16,9 @@ import Foundation
1616
1717
1818public enum Retry {
19- public enum Error : Swift . Error , Equatable {
20- case retryLimitExceeded( lastError: String ? )
19+ public enum Error : Swift . Error {
20+ case abort( with: Swift . Error )
21+ case retryLimitExceeded( lastError: Swift . Error ? = nil )
2122 }
2223
2324 public static func backedOffDelay( baseDelay: Double , attempt: Int ) -> UInt32 {
@@ -32,16 +33,18 @@ public enum Retry {
3233 _ block: ( ) throws -> T ) throws -> T {
3334 var retriesLeft = retries
3435 var currentTry = 1
35- var lastError : String ?
36+ var lastError : Swift . Error ?
3637 while true {
3738 if currentTry > 1 {
3839 logger. onStartOfRetry ( label: label, attempt: currentTry)
3940 }
4041 do {
4142 return try block ( )
43+ } catch let Error . abort( with: error) {
44+ throw Error . abort ( with: error)
4245 } catch {
4346 logger. onError ( label: label, error: error)
44- lastError = " \( error) "
47+ lastError = error
4548 guard retriesLeft > 0 else { break }
4649 let delay = backedOffDelay ( baseDelay: delay, attempt: currentTry)
4750 logger. onStartOfDelay ( label: label, delay: Double ( delay) )
@@ -61,16 +64,18 @@ public enum Retry {
6164 _ block: ( ) async throws -> T ) async throws -> T {
6265 var retriesLeft = retries
6366 var currentTry = 1
64- var lastError : String ?
67+ var lastError : Swift . Error ?
6568 while true {
6669 if currentTry > 1 {
6770 logger. onStartOfRetry ( label: label, attempt: currentTry)
6871 }
6972 do {
7073 return try await block ( )
74+ } catch let Error . abort( with: error) {
75+ throw Error . abort ( with: error)
7176 } catch {
7277 logger. onError ( label: label, error: error)
73- lastError = " \( error) "
78+ lastError = error
7479 guard retriesLeft > 0 else { break }
7580 let delay = backedOffDelay ( baseDelay: delay, attempt: currentTry)
7681 logger. onStartOfDelay ( label: label, delay: Double ( delay) )
0 commit comments