forked from loafle/openapi-generator-original
[swift][client] validate http status code (#5226)
* [swift][client] validate http status code * [swift][client] remove spaces in empty lines
This commit is contained in:
@@ -171,3 +171,9 @@ extension KeyedDecodingContainerProtocol {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension HTTPURLResponse {
|
||||
var isStatusCodeSuccessful: Bool {
|
||||
return Array(200 ..< 300).contains(statusCode)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ public enum DownloadException: Error {
|
||||
public enum DecodableRequestBuilderError: Error {
|
||||
case emptyDataResponse
|
||||
case nilHTTPResponse
|
||||
case unsuccessfulHTTPStatusCode(Error?)
|
||||
case jsonDecoding(DecodingError)
|
||||
case generalError(Error)
|
||||
}
|
||||
|
||||
@@ -187,14 +187,19 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
return
|
||||
}
|
||||
|
||||
guard httpResponse.isStatusCodeSuccessful else {
|
||||
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode(error))))
|
||||
return
|
||||
}
|
||||
|
||||
if let error = error {
|
||||
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error)))
|
||||
return
|
||||
}
|
||||
|
||||
switch T.self {
|
||||
case is String.Type:
|
||||
|
||||
if let error = error {
|
||||
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error)))
|
||||
return
|
||||
}
|
||||
|
||||
let body = data.flatMap { String(data: $0, encoding: .utf8) } ?? ""
|
||||
|
||||
completion(.success(Response<T>(response: httpResponse, body: body as? T)))
|
||||
@@ -236,20 +241,10 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
|
||||
case is Void.Type:
|
||||
|
||||
if let error = error {
|
||||
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error)))
|
||||
return
|
||||
}
|
||||
|
||||
completion(.success(Response(response: httpResponse, body: nil)))
|
||||
|
||||
default:
|
||||
|
||||
if let error = error {
|
||||
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error)))
|
||||
return
|
||||
}
|
||||
|
||||
completion(.success(Response(response: httpResponse, body: data as? T)))
|
||||
}
|
||||
|
||||
@@ -324,43 +319,33 @@ open class URLSessionDecodableRequestBuilder<T: Decodable>: URLSessionRequestBui
|
||||
return
|
||||
}
|
||||
|
||||
guard httpResponse.isStatusCodeSuccessful else {
|
||||
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode(error))))
|
||||
return
|
||||
}
|
||||
|
||||
if let error = error {
|
||||
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error)))
|
||||
return
|
||||
}
|
||||
|
||||
switch T.self {
|
||||
case is String.Type:
|
||||
|
||||
if let error = error {
|
||||
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error)))
|
||||
return
|
||||
}
|
||||
|
||||
let body = data.flatMap { String(data: $0, encoding: .utf8) } ?? ""
|
||||
|
||||
completion(.success(Response<T>(response: httpResponse, body: body as? T)))
|
||||
|
||||
case is Void.Type:
|
||||
|
||||
if let error = error {
|
||||
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error)))
|
||||
return
|
||||
}
|
||||
|
||||
completion(.success(Response(response: httpResponse, body: nil)))
|
||||
|
||||
case is Data.Type:
|
||||
|
||||
if let error = error {
|
||||
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error)))
|
||||
return
|
||||
}
|
||||
|
||||
completion(.success(Response(response: httpResponse, body: data as? T)))
|
||||
|
||||
default:
|
||||
|
||||
if let error = error {
|
||||
completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error)))
|
||||
return
|
||||
}
|
||||
|
||||
guard let data = data, !data.isEmpty else {
|
||||
completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, DecodableRequestBuilderError.emptyDataResponse)))
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user