// // OperationCompletion.swift // MullvadVPN // // Created by pronebird on 24/01/2022. // Copyright © 2022 Mullvad VPN AB. All rights reserved. // import Foundation enum OperationCompletion { case cancelled case success(Success) case failure(Failure) var error: Failure? { if case .failure(let error) = self { return error } else { return nil } } init(result: Result) { switch result { case .success(let value): self = .success(value) case .failure(let error): self = .failure(error) } } func map(_ block: (Success) -> NewSuccess) -> OperationCompletion { switch self { case .success(let value): return .success(block(value)) case .failure(let error): return .failure(error) case .cancelled: return .cancelled } } func mapError(_ block: (Failure) -> NewFailure) -> OperationCompletion { switch self { case .success(let value): return .success(value) case .failure(let error): return .failure(block(error)) case .cancelled: return .cancelled } } }