diff options
| author | Andrej Mihajlov <and@mullvad.net> | 2022-09-25 16:34:23 +0200 |
|---|---|---|
| committer | Andrej Mihajlov <and@mullvad.net> | 2022-09-26 16:35:38 +0200 |
| commit | f389956c2cd884df142adbf00ff2ac7e2f69c2b2 (patch) | |
| tree | 5f7d4869324760eb4ba0107c0356edc89efd1457 /ios/Operations/OperationObserver.swift | |
| parent | 2e83b1ca27ff243a615ff10c94c20840b38dfd45 (diff) | |
| download | mullvadvpn-f389956c2cd884df142adbf00ff2ac7e2f69c2b2.tar.xz mullvadvpn-f389956c2cd884df142adbf00ff2ac7e2f69c2b2.zip | |
Move AsyncOperation into Operations static library and add separate tests
Diffstat (limited to 'ios/Operations/OperationObserver.swift')
| -rw-r--r-- | ios/Operations/OperationObserver.swift | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/ios/Operations/OperationObserver.swift b/ios/Operations/OperationObserver.swift new file mode 100644 index 0000000000..db6264d2ba --- /dev/null +++ b/ios/Operations/OperationObserver.swift @@ -0,0 +1,63 @@ +// +// OperationObserver.swift +// MullvadVPN +// +// Created by pronebird on 30/05/2022. +// Copyright © 2022 Mullvad VPN AB. All rights reserved. +// + +import Foundation + +public protocol OperationObserver { + func didAttach(to operation: Operation) + func operationDidStart(_ operation: Operation) + func operationDidCancel(_ operation: Operation) + func operationDidFinish(_ operation: Operation, error: Error?) +} + +/// Block based operation observer. +public class OperationBlockObserver<OperationType: Operation>: OperationObserver { + public typealias VoidBlock = (OperationType) -> Void + public typealias FinishBlock = (OperationType, Error?) -> Void + + private let _didAttach: VoidBlock? + private let _didStart: VoidBlock? + private let _didCancel: VoidBlock? + private let _didFinish: FinishBlock? + + public init( + didAttach: VoidBlock? = nil, + didStart: VoidBlock? = nil, + didCancel: VoidBlock? = nil, + didFinish: FinishBlock? = nil + ) { + _didAttach = didAttach + _didStart = didStart + _didCancel = didCancel + _didFinish = didFinish + } + + public func didAttach(to operation: Operation) { + if let operation = operation as? OperationType { + _didAttach?(operation) + } + } + + public func operationDidStart(_ operation: Operation) { + if let operation = operation as? OperationType { + _didStart?(operation) + } + } + + public func operationDidCancel(_ operation: Operation) { + if let operation = operation as? OperationType { + _didCancel?(operation) + } + } + + public func operationDidFinish(_ operation: Operation, error: Error?) { + if let operation = operation as? OperationType { + _didFinish?(operation, error) + } + } +} |
