Sources/OSS/Retry/ErrorRetryableImpl.swift (40 lines of code) (raw):
import Foundation
public struct ServiceErrorRetryable: ErrorRetryable {
static let statusCodes: [Int] = [401, 408, 429]
static let errorCodes: [String] = ["RequestTimeTooSkewed", "BadRequest"]
static let errorMessages: [String] = ["Invalid signing date in Authorization header."]
public func isErrorRetryable(error: Error) -> Bool {
if let error = error as? ServerError {
if Self.statusCodes.contains(error.statusCode) {
return true
}
if error.statusCode >= 500 {
return true
}
if Self.errorCodes.contains(error.code) {
return true
}
if Self.errorMessages.contains(error.message) {
return true
}
}
return false
}
}
public struct ClientErrorRetryable: ErrorRetryable {
static let errorCodes: [String] = [
"CredentialsFetchError",
"InconsistentError",
"SerdeError",
"RemoteSignatureError",
"ResponseError",
]
public func isErrorRetryable(error: Error) -> Bool {
if let error = error as? ClientError {
if Self.errorCodes.contains(error.code) {
return true
}
}
return false
}
}