[swift5] add URLResponse to ErrorResponse (#8267)

* [swift5] add URLResponse to ErrorResponse

* [swift] improve unit tests

* [swift] improve unit tests
This commit is contained in:
Bruno Coelho 2020-12-29 15:31:12 +00:00 committed by GitHub
parent fd02bc3d84
commit 775b64f6c7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
67 changed files with 218 additions and 205 deletions

View File

@ -11,7 +11,7 @@ protocol JSONEncodable {
} }
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} enum ErrorResponse : Error { {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} enum ErrorResponse : Error {
case error(Int, Data?, Error) case error(Int, Data?, URLResponse?, Error)
} }
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} enum DownloadException : Error { {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} enum DownloadException : Error {

View File

@ -103,7 +103,7 @@ private var managerStore = SynchronizedDictionary<String, Alamofire.SessionManag
self.processRequest(request: upload, managerId, apiResponseQueue, completion) self.processRequest(request: upload, managerId, apiResponseQueue, completion)
case .failure(let encodingError): case .failure(let encodingError):
apiResponseQueue.async{ apiResponseQueue.async{
completion(.failure(ErrorResponse.error(415, nil, encodingError))) completion(.failure(ErrorResponse.error(415, nil, nil, encodingError)))
} }
} }
}) })
@ -137,7 +137,7 @@ private var managerStore = SynchronizedDictionary<String, Alamofire.SessionManag
case let .success(value): case let .success(value):
completion(.success(Response(response: stringResponse.response!, body: value as? T))) completion(.success(Response(response: stringResponse.response!, body: value as? T)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(stringResponse.response?.statusCode ?? 500, stringResponse.data, error))) completion(.failure(ErrorResponse.error(stringResponse.response?.statusCode ?? 500, stringResponse.data, stringResponse.response, error)))
} }
}) })
@ -179,9 +179,9 @@ private var managerStore = SynchronizedDictionary<String, Alamofire.SessionManag
completion(.success(Response(response: dataResponse.response!, body: filePath as? T))) completion(.success(Response(response: dataResponse.response!, body: filePath as? T)))
} catch let requestParserError as DownloadException { } catch let requestParserError as DownloadException {
completion(.failure(ErrorResponse.error(400, dataResponse.data, requestParserError))) completion(.failure(ErrorResponse.error(400, dataResponse.data, dataResponse.response, requestParserError)))
} catch let error { } catch let error {
completion(.failure(ErrorResponse.error(400, dataResponse.data, error))) completion(.failure(ErrorResponse.error(400, dataResponse.data, dataResponse.response, error)))
} }
return return
}) })
@ -193,7 +193,7 @@ private var managerStore = SynchronizedDictionary<String, Alamofire.SessionManag
case .success: case .success:
completion(.success(Response(response: voidResponse.response!, body: nil))) completion(.success(Response(response: voidResponse.response!, body: nil)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(voidResponse.response?.statusCode ?? 500, voidResponse.data, error))) completion(.failure(ErrorResponse.error(voidResponse.response?.statusCode ?? 500, voidResponse.data, voidResponse.response, error)))
} }
}) })
@ -205,7 +205,7 @@ private var managerStore = SynchronizedDictionary<String, Alamofire.SessionManag
case .success: case .success:
completion(.success(Response(response: dataResponse.response!, body: dataResponse.data as? T))) completion(.success(Response(response: dataResponse.response!, body: dataResponse.data as? T)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(dataResponse.response?.statusCode ?? 500, dataResponse.data, error))) completion(.failure(ErrorResponse.error(dataResponse.response?.statusCode ?? 500, dataResponse.data, dataResponse.response, error)))
} }
}) })
@ -295,7 +295,7 @@ private var managerStore = SynchronizedDictionary<String, Alamofire.SessionManag
case let .success(value): case let .success(value):
completion(.success(Response(response: stringResponse.response!, body: value as? T))) completion(.success(Response(response: stringResponse.response!, body: value as? T)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(stringResponse.response?.statusCode ?? 500, stringResponse.data, error))) completion(.failure(ErrorResponse.error(stringResponse.response?.statusCode ?? 500, stringResponse.data, stringResponse.response, error)))
} }
}) })
@ -307,7 +307,7 @@ private var managerStore = SynchronizedDictionary<String, Alamofire.SessionManag
case .success: case .success:
completion(.success(Response(response: voidResponse.response!, body: nil))) completion(.success(Response(response: voidResponse.response!, body: nil)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(voidResponse.response?.statusCode ?? 500, voidResponse.data, error))) completion(.failure(ErrorResponse.error(voidResponse.response?.statusCode ?? 500, voidResponse.data, voidResponse.response, error)))
} }
}) })
@ -319,7 +319,7 @@ private var managerStore = SynchronizedDictionary<String, Alamofire.SessionManag
case .success: case .success:
completion(.success(Response(response: dataResponse.response!, body: dataResponse.data as? T))) completion(.success(Response(response: dataResponse.response!, body: dataResponse.data as? T)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(dataResponse.response?.statusCode ?? 500, dataResponse.data, error))) completion(.failure(ErrorResponse.error(dataResponse.response?.statusCode ?? 500, dataResponse.data, dataResponse.response, error)))
} }
}) })
@ -328,17 +328,17 @@ private var managerStore = SynchronizedDictionary<String, Alamofire.SessionManag
cleanupRequest() cleanupRequest()
guard dataResponse.result.isSuccess else { guard dataResponse.result.isSuccess else {
completion(.failure(ErrorResponse.error(dataResponse.response?.statusCode ?? 500, dataResponse.data, dataResponse.result.error!))) completion(.failure(ErrorResponse.error(dataResponse.response?.statusCode ?? 500, dataResponse.data, dataResponse.response, dataResponse.result.error!)))
return return
} }
guard let data = dataResponse.data, !data.isEmpty else { guard let data = dataResponse.data, !data.isEmpty else {
completion(.failure(ErrorResponse.error(-1, nil, DecodableRequestBuilderError.emptyDataResponse))) completion(.failure(ErrorResponse.error(-1, nil, dataResponse.response, DecodableRequestBuilderError.emptyDataResponse)))
return return
} }
guard let httpResponse = dataResponse.response else { guard let httpResponse = dataResponse.response else {
completion(.failure(ErrorResponse.error(-2, nil, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, nil, dataResponse.response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
@ -348,7 +348,7 @@ private var managerStore = SynchronizedDictionary<String, Alamofire.SessionManag
case let .success(decodableObj): case let .success(decodableObj):
completion(.success(Response(response: httpResponse, body: decodableObj))) completion(.success(Response(response: httpResponse, body: decodableObj)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, httpResponse, error)))
} }
}) })

View File

@ -167,7 +167,7 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
} catch { } catch {
apiResponseQueue.async { apiResponseQueue.async {
cleanupRequest() cleanupRequest()
completion(.failure(ErrorResponse.error(415, nil, error))) completion(.failure(ErrorResponse.error(415, nil, nil, error)))
} }
} }
@ -176,17 +176,17 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -227,9 +227,9 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
completion(.success(Response(response: httpResponse, body: filePath as? T))) completion(.success(Response(response: httpResponse, body: filePath as? T)))
} catch let requestParserError as DownloadException { } catch let requestParserError as DownloadException {
completion(.failure(ErrorResponse.error(400, data, requestParserError))) completion(.failure(ErrorResponse.error(400, data, response, requestParserError)))
} catch let error { } catch let error {
completion(.failure(ErrorResponse.error(400, data, error))) completion(.failure(ErrorResponse.error(400, data, response, error)))
} }
case is Void.Type: case is Void.Type:
@ -311,17 +311,17 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -343,7 +343,7 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
default: default:
guard let data = data, !data.isEmpty else { guard let data = data, !data.isEmpty else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, DecodableRequestBuilderError.emptyDataResponse))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, response, DecodableRequestBuilderError.emptyDataResponse)))
return return
} }
@ -353,7 +353,7 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
case let .success(decodableObj): case let .success(decodableObj):
completion(.success(Response(response: httpResponse, body: decodableObj))) completion(.success(Response(response: httpResponse, body: decodableObj)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, error)))
} }
} }
} }

View File

@ -1086,6 +1086,7 @@ definitions:
xml: xml:
name: Order name: Order
Category: Category:
x-swift-hashable: true
type: object type: object
required: required:
- name - name
@ -1124,6 +1125,7 @@ definitions:
xml: xml:
name: User name: User
Tag: Tag:
x-swift-hashable: true
type: object type: object
properties: properties:
id: id:

21
pom.xml
View File

@ -1429,9 +1429,26 @@
</property> </property>
</activation> </activation>
<modules> <modules>
<!-- swift 5 samples -->
<module>samples/client/petstore/swift5/alamofireLibrary</module>
<module>samples/client/petstore/swift5/combineLibrary</module>
<module>samples/client/petstore/swift5/default</module>
<module>samples/client/petstore/swift5/deprecated</module>
<module>samples/client/petstore/swift5/nonPublicApi</module>
<module>samples/client/petstore/swift5/objcCompatible</module>
<module>samples/client/petstore/swift5/promisekitLibrary</module>
<module>samples/client/petstore/swift5/readonlyProperties</module>
<module>samples/client/petstore/swift5/resultLibrary</module>
<module>samples/client/petstore/swift5/rxswiftLibrary</module>
<module>samples/client/petstore/swift5/urlsessionLibrary</module>
<!-- swift 5 tests -->
<module>samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests</module>
<module>samples/client/petstore/swift5/combineLibrary/SwaggerClientTests</module>
<module>samples/client/petstore/swift5/default/SwaggerClientTests</module> <module>samples/client/petstore/swift5/default/SwaggerClientTests</module>
<module>samples/client/petstore/swift5/promisekit/SwaggerClientTests</module> <module>samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests</module>
<module>samples/client/petstore/swift5/rxswift/SwaggerClientTests</module> <module>samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests</module>
<module>samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests</module>
<!-- swift 4 tests -->
<module>samples/client/petstore/swift4/default/SwaggerClientTests</module> <module>samples/client/petstore/swift4/default/SwaggerClientTests</module>
<module>samples/client/petstore/swift4/promisekit/SwaggerClientTests</module> <module>samples/client/petstore/swift4/promisekit/SwaggerClientTests</module>
<module>samples/client/petstore/swift4/rxswift/SwaggerClientTests</module> <module>samples/client/petstore/swift4/rxswift/SwaggerClientTests</module>

View File

@ -1 +1 @@
5.0.0-SNAPSHOT 5.0.1-SNAPSHOT

View File

@ -102,7 +102,7 @@ open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
self.processRequest(request: upload, managerId, apiResponseQueue, completion) self.processRequest(request: upload, managerId, apiResponseQueue, completion)
case .failure(let encodingError): case .failure(let encodingError):
apiResponseQueue.async { apiResponseQueue.async {
completion(.failure(ErrorResponse.error(415, nil, encodingError))) completion(.failure(ErrorResponse.error(415, nil, nil, encodingError)))
} }
} }
}) })
@ -136,7 +136,7 @@ open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
case let .success(value): case let .success(value):
completion(.success(Response(response: stringResponse.response!, body: value as? T))) completion(.success(Response(response: stringResponse.response!, body: value as? T)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(stringResponse.response?.statusCode ?? 500, stringResponse.data, error))) completion(.failure(ErrorResponse.error(stringResponse.response?.statusCode ?? 500, stringResponse.data, stringResponse.response, error)))
} }
}) })
@ -178,9 +178,9 @@ open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
completion(.success(Response(response: dataResponse.response!, body: filePath as? T))) completion(.success(Response(response: dataResponse.response!, body: filePath as? T)))
} catch let requestParserError as DownloadException { } catch let requestParserError as DownloadException {
completion(.failure(ErrorResponse.error(400, dataResponse.data, requestParserError))) completion(.failure(ErrorResponse.error(400, dataResponse.data, dataResponse.response, requestParserError)))
} catch let error { } catch let error {
completion(.failure(ErrorResponse.error(400, dataResponse.data, error))) completion(.failure(ErrorResponse.error(400, dataResponse.data, dataResponse.response, error)))
} }
return return
}) })
@ -192,7 +192,7 @@ open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
case .success: case .success:
completion(.success(Response(response: voidResponse.response!, body: nil))) completion(.success(Response(response: voidResponse.response!, body: nil)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(voidResponse.response?.statusCode ?? 500, voidResponse.data, error))) completion(.failure(ErrorResponse.error(voidResponse.response?.statusCode ?? 500, voidResponse.data, voidResponse.response, error)))
} }
}) })
@ -204,7 +204,7 @@ open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
case .success: case .success:
completion(.success(Response(response: dataResponse.response!, body: dataResponse.data as? T))) completion(.success(Response(response: dataResponse.response!, body: dataResponse.data as? T)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(dataResponse.response?.statusCode ?? 500, dataResponse.data, error))) completion(.failure(ErrorResponse.error(dataResponse.response?.statusCode ?? 500, dataResponse.data, dataResponse.response, error)))
} }
}) })
@ -294,7 +294,7 @@ open class AlamofireDecodableRequestBuilder<T: Decodable>: AlamofireRequestBuild
case let .success(value): case let .success(value):
completion(.success(Response(response: stringResponse.response!, body: value as? T))) completion(.success(Response(response: stringResponse.response!, body: value as? T)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(stringResponse.response?.statusCode ?? 500, stringResponse.data, error))) completion(.failure(ErrorResponse.error(stringResponse.response?.statusCode ?? 500, stringResponse.data, stringResponse.response, error)))
} }
}) })
@ -306,7 +306,7 @@ open class AlamofireDecodableRequestBuilder<T: Decodable>: AlamofireRequestBuild
case .success: case .success:
completion(.success(Response(response: voidResponse.response!, body: nil))) completion(.success(Response(response: voidResponse.response!, body: nil)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(voidResponse.response?.statusCode ?? 500, voidResponse.data, error))) completion(.failure(ErrorResponse.error(voidResponse.response?.statusCode ?? 500, voidResponse.data, voidResponse.response, error)))
} }
}) })
@ -318,7 +318,7 @@ open class AlamofireDecodableRequestBuilder<T: Decodable>: AlamofireRequestBuild
case .success: case .success:
completion(.success(Response(response: dataResponse.response!, body: dataResponse.data as? T))) completion(.success(Response(response: dataResponse.response!, body: dataResponse.data as? T)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(dataResponse.response?.statusCode ?? 500, dataResponse.data, error))) completion(.failure(ErrorResponse.error(dataResponse.response?.statusCode ?? 500, dataResponse.data, dataResponse.response, error)))
} }
}) })
@ -327,17 +327,17 @@ open class AlamofireDecodableRequestBuilder<T: Decodable>: AlamofireRequestBuild
cleanupRequest() cleanupRequest()
guard dataResponse.result.isSuccess else { guard dataResponse.result.isSuccess else {
completion(.failure(ErrorResponse.error(dataResponse.response?.statusCode ?? 500, dataResponse.data, dataResponse.result.error!))) completion(.failure(ErrorResponse.error(dataResponse.response?.statusCode ?? 500, dataResponse.data, dataResponse.response, dataResponse.result.error!)))
return return
} }
guard let data = dataResponse.data, !data.isEmpty else { guard let data = dataResponse.data, !data.isEmpty else {
completion(.failure(ErrorResponse.error(-1, nil, DecodableRequestBuilderError.emptyDataResponse))) completion(.failure(ErrorResponse.error(-1, nil, dataResponse.response, DecodableRequestBuilderError.emptyDataResponse)))
return return
} }
guard let httpResponse = dataResponse.response else { guard let httpResponse = dataResponse.response else {
completion(.failure(ErrorResponse.error(-2, nil, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, nil, dataResponse.response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
@ -347,7 +347,7 @@ open class AlamofireDecodableRequestBuilder<T: Decodable>: AlamofireRequestBuild
case let .success(decodableObj): case let .success(decodableObj):
completion(.success(Response(response: httpResponse, body: decodableObj))) completion(.success(Response(response: httpResponse, body: decodableObj)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, httpResponse, error)))
} }
}) })

View File

@ -11,7 +11,7 @@ protocol JSONEncodable {
} }
public enum ErrorResponse: Error { public enum ErrorResponse: Error {
case error(Int, Data?, Error) case error(Int, Data?, URLResponse?, Error)
} }
public enum DownloadException: Error { public enum DownloadException: Error {

View File

@ -7,7 +7,7 @@
import Foundation import Foundation
public struct Category: Codable { public struct Category: Codable, Hashable {
public var id: Int64? public var id: Int64?
public var name: String = "default-name" public var name: String = "default-name"

View File

@ -7,7 +7,7 @@
import Foundation import Foundation
public struct Tag: Codable { public struct Tag: Codable, Hashable {
public var id: Int64? public var id: Int64?
public var name: String? public var name: String?

View File

@ -1 +1 @@
5.0.0-SNAPSHOT 5.0.1-SNAPSHOT

View File

@ -11,7 +11,7 @@ protocol JSONEncodable {
} }
public enum ErrorResponse: Error { public enum ErrorResponse: Error {
case error(Int, Data?, Error) case error(Int, Data?, URLResponse?, Error)
} }
public enum DownloadException: Error { public enum DownloadException: Error {

View File

@ -7,7 +7,7 @@
import Foundation import Foundation
public struct Category: Codable { public struct Category: Codable, Hashable {
public var id: Int64? public var id: Int64?
public var name: String = "default-name" public var name: String = "default-name"

View File

@ -7,7 +7,7 @@
import Foundation import Foundation
public struct Tag: Codable { public struct Tag: Codable, Hashable {
public var id: Int64? public var id: Int64?
public var name: String? public var name: String?

View File

@ -167,7 +167,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
} catch { } catch {
apiResponseQueue.async { apiResponseQueue.async {
cleanupRequest() cleanupRequest()
completion(.failure(ErrorResponse.error(415, nil, error))) completion(.failure(ErrorResponse.error(415, nil, nil, error)))
} }
} }
@ -176,17 +176,17 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -227,9 +227,9 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
completion(.success(Response(response: httpResponse, body: filePath as? T))) completion(.success(Response(response: httpResponse, body: filePath as? T)))
} catch let requestParserError as DownloadException { } catch let requestParserError as DownloadException {
completion(.failure(ErrorResponse.error(400, data, requestParserError))) completion(.failure(ErrorResponse.error(400, data, response, requestParserError)))
} catch let error { } catch let error {
completion(.failure(ErrorResponse.error(400, data, error))) completion(.failure(ErrorResponse.error(400, data, response, error)))
} }
case is Void.Type: case is Void.Type:
@ -311,17 +311,17 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -343,7 +343,7 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
default: default:
guard let data = data, !data.isEmpty else { guard let data = data, !data.isEmpty else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, DecodableRequestBuilderError.emptyDataResponse))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, response, DecodableRequestBuilderError.emptyDataResponse)))
return return
} }
@ -353,7 +353,7 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
case let .success(decodableObj): case let .success(decodableObj):
completion(.success(Response(response: httpResponse, body: decodableObj))) completion(.success(Response(response: httpResponse, body: decodableObj)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, error)))
} }
} }
} }

View File

@ -1 +1 @@
5.0.0-SNAPSHOT 5.0.1-SNAPSHOT

View File

@ -11,7 +11,7 @@ protocol JSONEncodable {
} }
public enum ErrorResponse: Error { public enum ErrorResponse: Error {
case error(Int, Data?, Error) case error(Int, Data?, URLResponse?, Error)
} }
public enum DownloadException: Error { public enum DownloadException: Error {

View File

@ -7,7 +7,7 @@
import Foundation import Foundation
public struct Category: Codable { public struct Category: Codable, Hashable {
public var id: Int64? public var id: Int64?
public var name: String = "default-name" public var name: String = "default-name"

View File

@ -7,7 +7,7 @@
import Foundation import Foundation
public struct Tag: Codable { public struct Tag: Codable, Hashable {
public var id: Int64? public var id: Int64?
public var name: String? public var name: String?

View File

@ -167,7 +167,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
} catch { } catch {
apiResponseQueue.async { apiResponseQueue.async {
cleanupRequest() cleanupRequest()
completion(.failure(ErrorResponse.error(415, nil, error))) completion(.failure(ErrorResponse.error(415, nil, nil, error)))
} }
} }
@ -176,17 +176,17 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -227,9 +227,9 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
completion(.success(Response(response: httpResponse, body: filePath as? T))) completion(.success(Response(response: httpResponse, body: filePath as? T)))
} catch let requestParserError as DownloadException { } catch let requestParserError as DownloadException {
completion(.failure(ErrorResponse.error(400, data, requestParserError))) completion(.failure(ErrorResponse.error(400, data, response, requestParserError)))
} catch let error { } catch let error {
completion(.failure(ErrorResponse.error(400, data, error))) completion(.failure(ErrorResponse.error(400, data, response, error)))
} }
case is Void.Type: case is Void.Type:
@ -311,17 +311,17 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -343,7 +343,7 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
default: default:
guard let data = data, !data.isEmpty else { guard let data = data, !data.isEmpty else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, DecodableRequestBuilderError.emptyDataResponse))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, response, DecodableRequestBuilderError.emptyDataResponse)))
return return
} }
@ -353,7 +353,7 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
case let .success(decodableObj): case let .success(decodableObj):
completion(.success(Response(response: httpResponse, body: decodableObj))) completion(.success(Response(response: httpResponse, body: decodableObj)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, error)))
} }
} }
} }

View File

@ -15,8 +15,6 @@ PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
PetstoreClient/Classes/OpenAPIs/Models.swift PetstoreClient/Classes/OpenAPIs/Models.swift
PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift
PetstoreClient/Classes/OpenAPIs/Models/Category.swift PetstoreClient/Classes/OpenAPIs/Models/Category.swift
PetstoreClient/Classes/OpenAPIs/Models/InlineObject.swift
PetstoreClient/Classes/OpenAPIs/Models/InlineObject1.swift
PetstoreClient/Classes/OpenAPIs/Models/Order.swift PetstoreClient/Classes/OpenAPIs/Models/Order.swift
PetstoreClient/Classes/OpenAPIs/Models/Pet.swift PetstoreClient/Classes/OpenAPIs/Models/Pet.swift
PetstoreClient/Classes/OpenAPIs/Models/Tag.swift PetstoreClient/Classes/OpenAPIs/Models/Tag.swift
@ -27,8 +25,6 @@ PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift
README.md README.md
docs/ApiResponse.md docs/ApiResponse.md
docs/Category.md docs/Category.md
docs/InlineObject.md
docs/InlineObject1.md
docs/Order.md docs/Order.md
docs/Pet.md docs/Pet.md
docs/PetAPI.md docs/PetAPI.md

View File

@ -1 +1 @@
5.0.0-SNAPSHOT 5.0.1-SNAPSHOT

View File

@ -11,7 +11,7 @@ protocol JSONEncodable {
} }
public enum ErrorResponse: Error { public enum ErrorResponse: Error {
case error(Int, Data?, Error) case error(Int, Data?, URLResponse?, Error)
} }
public enum DownloadException: Error { public enum DownloadException: Error {

View File

@ -167,7 +167,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
} catch { } catch {
apiResponseQueue.async { apiResponseQueue.async {
cleanupRequest() cleanupRequest()
completion(.failure(ErrorResponse.error(415, nil, error))) completion(.failure(ErrorResponse.error(415, nil, nil, error)))
} }
} }
@ -176,17 +176,17 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -227,9 +227,9 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
completion(.success(Response(response: httpResponse, body: filePath as? T))) completion(.success(Response(response: httpResponse, body: filePath as? T)))
} catch let requestParserError as DownloadException { } catch let requestParserError as DownloadException {
completion(.failure(ErrorResponse.error(400, data, requestParserError))) completion(.failure(ErrorResponse.error(400, data, response, requestParserError)))
} catch let error { } catch let error {
completion(.failure(ErrorResponse.error(400, data, error))) completion(.failure(ErrorResponse.error(400, data, response, error)))
} }
case is Void.Type: case is Void.Type:
@ -311,17 +311,17 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -343,7 +343,7 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
default: default:
guard let data = data, !data.isEmpty else { guard let data = data, !data.isEmpty else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, DecodableRequestBuilderError.emptyDataResponse))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, response, DecodableRequestBuilderError.emptyDataResponse)))
return return
} }
@ -353,7 +353,7 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
case let .success(decodableObj): case let .success(decodableObj):
completion(.success(Response(response: httpResponse, body: decodableObj))) completion(.success(Response(response: httpResponse, body: decodableObj)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, error)))
} }
} }
} }

View File

@ -51,8 +51,6 @@ Class | Method | HTTP request | Description
- [ApiResponse](docs/ApiResponse.md) - [ApiResponse](docs/ApiResponse.md)
- [Category](docs/Category.md) - [Category](docs/Category.md)
- [InlineObject](docs/InlineObject.md)
- [InlineObject1](docs/InlineObject1.md)
- [Order](docs/Order.md) - [Order](docs/Order.md)
- [Pet](docs/Pet.md) - [Pet](docs/Pet.md)
- [Tag](docs/Tag.md) - [Tag](docs/Tag.md)

View File

@ -1 +1 @@
5.0.0-SNAPSHOT 5.0.1-SNAPSHOT

View File

@ -11,7 +11,7 @@ protocol JSONEncodable {
} }
internal enum ErrorResponse: Error { internal enum ErrorResponse: Error {
case error(Int, Data?, Error) case error(Int, Data?, URLResponse?, Error)
} }
internal enum DownloadException: Error { internal enum DownloadException: Error {

View File

@ -7,7 +7,7 @@
import Foundation import Foundation
internal struct Category: Codable { internal struct Category: Codable, Hashable {
internal var id: Int64? internal var id: Int64?
internal var name: String = "default-name" internal var name: String = "default-name"

View File

@ -7,7 +7,7 @@
import Foundation import Foundation
internal struct Tag: Codable { internal struct Tag: Codable, Hashable {
internal var id: Int64? internal var id: Int64?
internal var name: String? internal var name: String?

View File

@ -167,7 +167,7 @@ internal class URLSessionRequestBuilder<T>: RequestBuilder<T> {
} catch { } catch {
apiResponseQueue.async { apiResponseQueue.async {
cleanupRequest() cleanupRequest()
completion(.failure(ErrorResponse.error(415, nil, error))) completion(.failure(ErrorResponse.error(415, nil, nil, error)))
} }
} }
@ -176,17 +176,17 @@ internal class URLSessionRequestBuilder<T>: RequestBuilder<T> {
fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -227,9 +227,9 @@ internal class URLSessionRequestBuilder<T>: RequestBuilder<T> {
completion(.success(Response(response: httpResponse, body: filePath as? T))) completion(.success(Response(response: httpResponse, body: filePath as? T)))
} catch let requestParserError as DownloadException { } catch let requestParserError as DownloadException {
completion(.failure(ErrorResponse.error(400, data, requestParserError))) completion(.failure(ErrorResponse.error(400, data, response, requestParserError)))
} catch let error { } catch let error {
completion(.failure(ErrorResponse.error(400, data, error))) completion(.failure(ErrorResponse.error(400, data, response, error)))
} }
case is Void.Type: case is Void.Type:
@ -311,17 +311,17 @@ internal class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionReques
override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -343,7 +343,7 @@ internal class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionReques
default: default:
guard let data = data, !data.isEmpty else { guard let data = data, !data.isEmpty else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, DecodableRequestBuilderError.emptyDataResponse))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, response, DecodableRequestBuilderError.emptyDataResponse)))
return return
} }
@ -353,7 +353,7 @@ internal class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionReques
case let .success(decodableObj): case let .success(decodableObj):
completion(.success(Response(response: httpResponse, body: decodableObj))) completion(.success(Response(response: httpResponse, body: decodableObj)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, error)))
} }
} }
} }

View File

@ -1 +1 @@
5.0.0-SNAPSHOT 5.0.1-SNAPSHOT

View File

@ -11,7 +11,7 @@ protocol JSONEncodable {
} }
public enum ErrorResponse: Error { public enum ErrorResponse: Error {
case error(Int, Data?, Error) case error(Int, Data?, URLResponse?, Error)
} }
public enum DownloadException: Error { public enum DownloadException: Error {

View File

@ -7,7 +7,7 @@
import Foundation import Foundation
@objc public class Category: NSObject, Codable { @objc public class Category: NSObject, Codable, Hashable {
public var _id: Int64? public var _id: Int64?
public var _idNum: NSNumber? { public var _idNum: NSNumber? {

View File

@ -7,7 +7,7 @@
import Foundation import Foundation
@objc public class Tag: NSObject, Codable { @objc public class Tag: NSObject, Codable, Hashable {
public var _id: Int64? public var _id: Int64?
public var _idNum: NSNumber? { public var _idNum: NSNumber? {

View File

@ -167,7 +167,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
} catch { } catch {
apiResponseQueue.async { apiResponseQueue.async {
cleanupRequest() cleanupRequest()
completion(.failure(ErrorResponse.error(415, nil, error))) completion(.failure(ErrorResponse.error(415, nil, nil, error)))
} }
} }
@ -176,17 +176,17 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -227,9 +227,9 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
completion(.success(Response(response: httpResponse, body: filePath as? T))) completion(.success(Response(response: httpResponse, body: filePath as? T)))
} catch let requestParserError as DownloadException { } catch let requestParserError as DownloadException {
completion(.failure(ErrorResponse.error(400, data, requestParserError))) completion(.failure(ErrorResponse.error(400, data, response, requestParserError)))
} catch let error { } catch let error {
completion(.failure(ErrorResponse.error(400, data, error))) completion(.failure(ErrorResponse.error(400, data, response, error)))
} }
case is Void.Type: case is Void.Type:
@ -311,17 +311,17 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -343,7 +343,7 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
default: default:
guard let data = data, !data.isEmpty else { guard let data = data, !data.isEmpty else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, DecodableRequestBuilderError.emptyDataResponse))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, response, DecodableRequestBuilderError.emptyDataResponse)))
return return
} }
@ -353,7 +353,7 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
case let .success(decodableObj): case let .success(decodableObj):
completion(.success(Response(response: httpResponse, body: decodableObj))) completion(.success(Response(response: httpResponse, body: decodableObj)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, error)))
} }
} }
} }

View File

@ -1 +1 @@
5.0.0-SNAPSHOT 5.0.1-SNAPSHOT

View File

@ -11,7 +11,7 @@ protocol JSONEncodable {
} }
public enum ErrorResponse: Error { public enum ErrorResponse: Error {
case error(Int, Data?, Error) case error(Int, Data?, URLResponse?, Error)
} }
public enum DownloadException: Error { public enum DownloadException: Error {

View File

@ -7,7 +7,7 @@
import Foundation import Foundation
public struct Category: Codable { public struct Category: Codable, Hashable {
public var id: Int64? public var id: Int64?
public var name: String = "default-name" public var name: String = "default-name"

View File

@ -7,7 +7,7 @@
import Foundation import Foundation
public struct Tag: Codable { public struct Tag: Codable, Hashable {
public var id: Int64? public var id: Int64?
public var name: String? public var name: String?

View File

@ -167,7 +167,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
} catch { } catch {
apiResponseQueue.async { apiResponseQueue.async {
cleanupRequest() cleanupRequest()
completion(.failure(ErrorResponse.error(415, nil, error))) completion(.failure(ErrorResponse.error(415, nil, nil, error)))
} }
} }
@ -176,17 +176,17 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -227,9 +227,9 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
completion(.success(Response(response: httpResponse, body: filePath as? T))) completion(.success(Response(response: httpResponse, body: filePath as? T)))
} catch let requestParserError as DownloadException { } catch let requestParserError as DownloadException {
completion(.failure(ErrorResponse.error(400, data, requestParserError))) completion(.failure(ErrorResponse.error(400, data, response, requestParserError)))
} catch let error { } catch let error {
completion(.failure(ErrorResponse.error(400, data, error))) completion(.failure(ErrorResponse.error(400, data, response, error)))
} }
case is Void.Type: case is Void.Type:
@ -311,17 +311,17 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -343,7 +343,7 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
default: default:
guard let data = data, !data.isEmpty else { guard let data = data, !data.isEmpty else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, DecodableRequestBuilderError.emptyDataResponse))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, response, DecodableRequestBuilderError.emptyDataResponse)))
return return
} }
@ -353,7 +353,7 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
case let .success(decodableObj): case let .success(decodableObj):
completion(.success(Response(response: httpResponse, body: decodableObj))) completion(.success(Response(response: httpResponse, body: decodableObj)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, error)))
} }
} }
} }

View File

@ -1 +1 @@
5.0.0-SNAPSHOT 5.0.1-SNAPSHOT

View File

@ -11,7 +11,7 @@ protocol JSONEncodable {
} }
public enum ErrorResponse: Error { public enum ErrorResponse: Error {
case error(Int, Data?, Error) case error(Int, Data?, URLResponse?, Error)
} }
public enum DownloadException: Error { public enum DownloadException: Error {

View File

@ -7,7 +7,7 @@
import Foundation import Foundation
public struct Category: Codable { public struct Category: Codable, Hashable {
public private(set) var id: Int64? public private(set) var id: Int64?
public private(set) var name: String = "default-name" public private(set) var name: String = "default-name"

View File

@ -7,7 +7,7 @@
import Foundation import Foundation
public struct Tag: Codable { public struct Tag: Codable, Hashable {
public private(set) var id: Int64? public private(set) var id: Int64?
public private(set) var name: String? public private(set) var name: String?

View File

@ -167,7 +167,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
} catch { } catch {
apiResponseQueue.async { apiResponseQueue.async {
cleanupRequest() cleanupRequest()
completion(.failure(ErrorResponse.error(415, nil, error))) completion(.failure(ErrorResponse.error(415, nil, nil, error)))
} }
} }
@ -176,17 +176,17 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -227,9 +227,9 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
completion(.success(Response(response: httpResponse, body: filePath as? T))) completion(.success(Response(response: httpResponse, body: filePath as? T)))
} catch let requestParserError as DownloadException { } catch let requestParserError as DownloadException {
completion(.failure(ErrorResponse.error(400, data, requestParserError))) completion(.failure(ErrorResponse.error(400, data, response, requestParserError)))
} catch let error { } catch let error {
completion(.failure(ErrorResponse.error(400, data, error))) completion(.failure(ErrorResponse.error(400, data, response, error)))
} }
case is Void.Type: case is Void.Type:
@ -311,17 +311,17 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -343,7 +343,7 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
default: default:
guard let data = data, !data.isEmpty else { guard let data = data, !data.isEmpty else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, DecodableRequestBuilderError.emptyDataResponse))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, response, DecodableRequestBuilderError.emptyDataResponse)))
return return
} }
@ -353,7 +353,7 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
case let .success(decodableObj): case let .success(decodableObj):
completion(.success(Response(response: httpResponse, body: decodableObj))) completion(.success(Response(response: httpResponse, body: decodableObj)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, error)))
} }
} }
} }

View File

@ -1 +1 @@
5.0.0-SNAPSHOT 5.0.1-SNAPSHOT

View File

@ -11,7 +11,7 @@ protocol JSONEncodable {
} }
public enum ErrorResponse: Error { public enum ErrorResponse: Error {
case error(Int, Data?, Error) case error(Int, Data?, URLResponse?, Error)
} }
public enum DownloadException: Error { public enum DownloadException: Error {

View File

@ -7,7 +7,7 @@
import Foundation import Foundation
public struct Category: Codable { public struct Category: Codable, Hashable {
public var id: Int64? public var id: Int64?
public var name: String = "default-name" public var name: String = "default-name"

View File

@ -7,7 +7,7 @@
import Foundation import Foundation
public struct Tag: Codable { public struct Tag: Codable, Hashable {
public var id: Int64? public var id: Int64?
public var name: String? public var name: String?

View File

@ -167,7 +167,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
} catch { } catch {
apiResponseQueue.async { apiResponseQueue.async {
cleanupRequest() cleanupRequest()
completion(.failure(ErrorResponse.error(415, nil, error))) completion(.failure(ErrorResponse.error(415, nil, nil, error)))
} }
} }
@ -176,17 +176,17 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -227,9 +227,9 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
completion(.success(Response(response: httpResponse, body: filePath as? T))) completion(.success(Response(response: httpResponse, body: filePath as? T)))
} catch let requestParserError as DownloadException { } catch let requestParserError as DownloadException {
completion(.failure(ErrorResponse.error(400, data, requestParserError))) completion(.failure(ErrorResponse.error(400, data, response, requestParserError)))
} catch let error { } catch let error {
completion(.failure(ErrorResponse.error(400, data, error))) completion(.failure(ErrorResponse.error(400, data, response, error)))
} }
case is Void.Type: case is Void.Type:
@ -311,17 +311,17 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -343,7 +343,7 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
default: default:
guard let data = data, !data.isEmpty else { guard let data = data, !data.isEmpty else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, DecodableRequestBuilderError.emptyDataResponse))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, response, DecodableRequestBuilderError.emptyDataResponse)))
return return
} }
@ -353,7 +353,7 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
case let .success(decodableObj): case let .success(decodableObj):
completion(.success(Response(response: httpResponse, body: decodableObj))) completion(.success(Response(response: httpResponse, body: decodableObj)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, error)))
} }
} }
} }

View File

@ -1 +1 @@
5.0.0-SNAPSHOT 5.0.1-SNAPSHOT

View File

@ -11,7 +11,7 @@ protocol JSONEncodable {
} }
public enum ErrorResponse: Error { public enum ErrorResponse: Error {
case error(Int, Data?, Error) case error(Int, Data?, URLResponse?, Error)
} }
public enum DownloadException: Error { public enum DownloadException: Error {

View File

@ -7,7 +7,7 @@
import Foundation import Foundation
public struct Category: Codable { public struct Category: Codable, Hashable {
public var id: Int64? public var id: Int64?
public var name: String = "default-name" public var name: String = "default-name"

View File

@ -7,7 +7,7 @@
import Foundation import Foundation
public struct Tag: Codable { public struct Tag: Codable, Hashable {
public var id: Int64? public var id: Int64?
public var name: String? public var name: String?

View File

@ -167,7 +167,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
} catch { } catch {
apiResponseQueue.async { apiResponseQueue.async {
cleanupRequest() cleanupRequest()
completion(.failure(ErrorResponse.error(415, nil, error))) completion(.failure(ErrorResponse.error(415, nil, nil, error)))
} }
} }
@ -176,17 +176,17 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -227,9 +227,9 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
completion(.success(Response(response: httpResponse, body: filePath as? T))) completion(.success(Response(response: httpResponse, body: filePath as? T)))
} catch let requestParserError as DownloadException { } catch let requestParserError as DownloadException {
completion(.failure(ErrorResponse.error(400, data, requestParserError))) completion(.failure(ErrorResponse.error(400, data, response, requestParserError)))
} catch let error { } catch let error {
completion(.failure(ErrorResponse.error(400, data, error))) completion(.failure(ErrorResponse.error(400, data, response, error)))
} }
case is Void.Type: case is Void.Type:
@ -311,17 +311,17 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -343,7 +343,7 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
default: default:
guard let data = data, !data.isEmpty else { guard let data = data, !data.isEmpty else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, DecodableRequestBuilderError.emptyDataResponse))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, response, DecodableRequestBuilderError.emptyDataResponse)))
return return
} }
@ -353,7 +353,7 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
case let .success(decodableObj): case let .success(decodableObj):
completion(.success(Response(response: httpResponse, body: decodableObj))) completion(.success(Response(response: httpResponse, body: decodableObj)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, error)))
} }
} }
} }

View File

@ -1 +1 @@
5.0.0-SNAPSHOT 5.0.1-SNAPSHOT

View File

@ -11,7 +11,7 @@ protocol JSONEncodable {
} }
public enum ErrorResponse: Error { public enum ErrorResponse: Error {
case error(Int, Data?, Error) case error(Int, Data?, URLResponse?, Error)
} }
public enum DownloadException: Error { public enum DownloadException: Error {

View File

@ -7,7 +7,7 @@
import Foundation import Foundation
public struct Category: Codable { public struct Category: Codable, Hashable {
public var id: Int64? public var id: Int64?
public var name: String = "default-name" public var name: String = "default-name"

View File

@ -7,7 +7,7 @@
import Foundation import Foundation
public struct Tag: Codable { public struct Tag: Codable, Hashable {
public var id: Int64? public var id: Int64?
public var name: String? public var name: String?

View File

@ -167,7 +167,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
} catch { } catch {
apiResponseQueue.async { apiResponseQueue.async {
cleanupRequest() cleanupRequest()
completion(.failure(ErrorResponse.error(415, nil, error))) completion(.failure(ErrorResponse.error(415, nil, nil, error)))
} }
} }
@ -176,17 +176,17 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -227,9 +227,9 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
completion(.success(Response(response: httpResponse, body: filePath as? T))) completion(.success(Response(response: httpResponse, body: filePath as? T)))
} catch let requestParserError as DownloadException { } catch let requestParserError as DownloadException {
completion(.failure(ErrorResponse.error(400, data, requestParserError))) completion(.failure(ErrorResponse.error(400, data, response, requestParserError)))
} catch let error { } catch let error {
completion(.failure(ErrorResponse.error(400, data, error))) completion(.failure(ErrorResponse.error(400, data, response, error)))
} }
case is Void.Type: case is Void.Type:
@ -311,17 +311,17 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) { override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result<Response<T>, Error>) -> Void) {
if let error = error { if let error = error {
completion(.failure(ErrorResponse.error(-1, data, error))) completion(.failure(ErrorResponse.error(-1, data, response, error)))
return return
} }
guard let httpResponse = response as? HTTPURLResponse else { guard let httpResponse = response as? HTTPURLResponse else {
completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse))) completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse)))
return return
} }
guard httpResponse.isStatusCodeSuccessful else { guard httpResponse.isStatusCodeSuccessful else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
return return
} }
@ -343,7 +343,7 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
default: default:
guard let data = data, !data.isEmpty else { guard let data = data, !data.isEmpty else {
completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, DecodableRequestBuilderError.emptyDataResponse))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, response, DecodableRequestBuilderError.emptyDataResponse)))
return return
} }
@ -353,7 +353,7 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
case let .success(decodableObj): case let .success(decodableObj):
completion(.success(Response(response: httpResponse, body: decodableObj))) completion(.success(Response(response: httpResponse, body: decodableObj)))
case let .failure(error): case let .failure(error):
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error))) completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, error)))
} }
} }
} }