diff --git a/Sources/Enums/RequestError.swift b/Sources/Enums/RequestError.swift index 9132e1b3..3128a11c 100644 --- a/Sources/Enums/RequestError.swift +++ b/Sources/Enums/RequestError.swift @@ -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?) } diff --git a/Sources/Extensions/Alamofire/DataRequest+Extensions.swift b/Sources/Extensions/Alamofire/DataRequest+Extensions.swift index b0154c8d..7f2cca32 100644 --- a/Sources/Extensions/Alamofire/DataRequest+Extensions.swift +++ b/Sources/Extensions/Alamofire/DataRequest+Extensions.swift @@ -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 diff --git a/Sources/Extensions/Error/Error+NetworkExtensions.swift b/Sources/Extensions/Error/Error+NetworkExtensions.swift index a458681c..d4c562af 100644 --- a/Sources/Extensions/Error/Error+NetworkExtensions.swift +++ b/Sources/Extensions/Error/Error+NetworkExtensions.swift @@ -34,7 +34,7 @@ public extension Error { /// - Returns: optional target object /// - Throws: an error during decoding func handleMappingError(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 }