feat: Update RequestError cases and url passing to them

This commit is contained in:
Alexey Gurin 2022-07-28 14:28:05 +04:00
parent af73b2964f
commit db19e24bc4
3 changed files with 21 additions and 15 deletions

View File

@ -31,8 +31,8 @@ import Alamofire
/// - mapping: Errors that occurs during mapping json into model.
public enum RequestError: Error {
case noConnection
case network(error: Error, response: Data?)
case invalidResponse(error: AFError, response: Data?)
case mapping(error: Error, response: Data)
case noConnection(url: String?)
case network(error: Error, response: Data?, url: String?)
case invalidResponse(error: AFError, response: Data?, url: String?)
case mapping(error: Error, response: Data, url: String?)
}

View File

@ -93,7 +93,9 @@ private extension ObservableType where Element == ServerResponse {
do {
return try transform($0)
} catch {
throw RequestError.mapping(error: error, response: $0.1)
throw RequestError.mapping(error: error,
response: $0.1,
url: $0.0.url?.absoluteString)
}
}
}
@ -103,10 +105,14 @@ private extension ObservableType where Element == ServerResponse {
do {
return try transform((response, result))
.catch {
throw RequestError.mapping(error: $0, response: result)
throw RequestError.mapping(error: $0,
response: result,
url: response.url?.absoluteString)
}
} catch {
throw RequestError.mapping(error: error, response: result)
throw RequestError.mapping(error: error,
response: result,
url: response.url?.absoluteString)
}
}
}
@ -127,10 +133,10 @@ private extension ObservableType {
case let urlError as URLError:
switch urlError.code {
case .notConnectedToInternet:
resultError = .noConnection
resultError = .noConnection(url: url)
default:
resultError = .network(error: urlError, response: response)
resultError = .network(error: urlError, response: response, url: url)
}
case let afError as AFError:
@ -138,21 +144,21 @@ private extension ObservableType {
case let .sessionTaskFailed(error):
switch error {
case let urlError as URLError where urlError.code == .notConnectedToInternet:
resultError = .noConnection
resultError = .noConnection(url: url)
default:
resultError = .network(error: error, response: response)
resultError = .network(error: error, response: response, url: url)
}
case .responseSerializationFailed, .responseValidationFailed:
resultError = .invalidResponse(error: afError, response: response)
resultError = .invalidResponse(error: afError, response: response, url: url)
default:
resultError = .network(error: afError, response: response)
resultError = .network(error: afError, response: response, url: url)
}
default:
resultError = .network(error: error, response: response)
resultError = .network(error: error, response: response, url: url)
}
throw resultError

View File

@ -34,7 +34,7 @@ public extension Error {
/// - Returns: optional target object
/// - Throws: an error during decoding
func handleMappingError<T: Decodable>(with decoder: JSONDecoder = JSONDecoder()) throws -> T? {
guard let self = requestError, case .mapping(_, let response) = self else {
guard let self = requestError, case .mapping(_, let response, _) = self else {
return nil
}