Skip to content

Commit

Permalink
added future for data request
Browse files Browse the repository at this point in the history
  • Loading branch information
mmitrevs committed Oct 18, 2020
1 parent 99cd8fa commit 580e41c
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 0 deletions.
3 changes: 3 additions & 0 deletions GirdersSwift/src/main/swift/http/HTTP.swift
Expand Up @@ -87,6 +87,9 @@ public protocol HTTP {
@available(iOS 13, *)
func executeDataRequest(request: Request) -> AnyPublisher<Data, Error>

@available (iOS 13, *)
func executeDataRequest(request: Request) -> Future<Data, Error>

/// Executes the request with the provided url, returning a Combine future.
///
/// - Parameter request: The request object containing all required data.
Expand Down
34 changes: 34 additions & 0 deletions GirdersSwift/src/main/swift/http/HTTPClient.swift
Expand Up @@ -225,6 +225,40 @@ extension HTTPClient {
return publisher
}

@available (iOS 13, *)
public func executeDataRequest(request: Request) -> Future<Data, Error> {
return Future<Data, Error> { [unowned self] promise in
let urlRequest: URLRequest = URLRequest(request: request)
self.requestsPool.append(request)
self.urlSession.dataTask(with: urlRequest) { [unowned self] (data, urlResponse, error) in
self.removeFromPool(request: request)

if let error = error {
promise(.failure(error))
return
}
if let data = data {
promise(.success(data))
}

if let httpResponse = urlResponse as? HTTPURLResponse {
let response: Response<Data> = Response(statusCode: httpResponse.statusCode,
body: data as Data?,
bodyObject: nil,
responseHeaders: httpResponse.allHeaderFields,
url: httpResponse.url)
let responseError = ResponseError<Data>.error(fromResponse: response)
promise(.failure(responseError))
return
}

promise(.failure(NSError.unknown))
}
.resume()
}

}

@available (iOS 13, *)
public func executeRequest<T>(request: Request) -> Future<T, Error> where T: Decodable {
return Future<T, Error> { [unowned self] promise in
Expand Down

0 comments on commit 580e41c

Please sign in to comment.