summaryrefslogtreecommitdiffhomepage
path: root/ios/MullvadVPN/REST/RESTRequestAdapter.swift
blob: b44038e7d06a5449d55eb541cbf4d763b336aff8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//
//  RESTRequestAdapter.swift
//  MullvadVPN
//
//  Created by pronebird on 03/12/2021.
//  Copyright © 2021 Mullvad VPN AB. All rights reserved.
//

import Foundation

extension REST {

    struct RequestAdapter<Success> {
        typealias CompletionHandler = (Result<Success, REST.Error>) -> Void

        private let block: (RetryStrategy, @escaping CompletionHandler) -> AnyCancellable

        init(block: @escaping (RetryStrategy, @escaping CompletionHandler) -> AnyCancellable) {
            self.block = block
        }

        func execute(retryStrategy: RetryStrategy = RetryStrategy.noRetry, completionHandler: @escaping CompletionHandler) -> AnyCancellable {
            return self.block(retryStrategy, completionHandler)
        }

        func execute(retryStrategy: RetryStrategy = RetryStrategy.noRetry) -> Result<Success, REST.Error>.Promise {
            return Promise { resolver in
                let cancellable = self.execute(retryStrategy: retryStrategy) { result in
                    resolver.resolve(value: result)
                }

                resolver.setCancelHandler {
                    cancellable.cancel()
                }
            }
        }
    }



}