// // FetchingServersOperation.swift // PrivadoVPN // // Created by Juraldinio on 3/20/21. // Copyright © 2021 Privado LLC. All rights reserved. // import Foundation protocol FetchingServersOperationOutput { var result: Result? { get } } final class FetchingServersOperation: AsyncOperation { enum OperationError: Error { case cancelled } private(set) var result: Result? // FetchingServersOperationOutput private let interactor: MainInteractorInput init(interactor: MainInteractorInput) { self.interactor = interactor } // MARK: - AsyncOperation override func main() { guard !self.isCancelled else { self.result = Result.failure(OperationError.cancelled) return } self.interactor.fetchServers { [weak self] result in guard let self = self else { return } guard !self.isCancelled else { self.result = Result.failure(OperationError.cancelled) self.state = .finished return } self.result = result self.state = .finished } } override func cancel() { self.result = Result.failure(OperationError.cancelled) super.cancel() } } extension FetchingServersOperation: FetchingServersOperationOutput { }