summaryrefslogtreecommitdiffhomepage
path: root/ios/Operations/OperationBlockObserverSupport.swift
diff options
context:
space:
mode:
Diffstat (limited to 'ios/Operations/OperationBlockObserverSupport.swift')
-rw-r--r--ios/Operations/OperationBlockObserverSupport.swift35
1 files changed, 35 insertions, 0 deletions
diff --git a/ios/Operations/OperationBlockObserverSupport.swift b/ios/Operations/OperationBlockObserverSupport.swift
new file mode 100644
index 0000000000..196adee763
--- /dev/null
+++ b/ios/Operations/OperationBlockObserverSupport.swift
@@ -0,0 +1,35 @@
+//
+// OperationBlockObserverSupport.swift
+// Operations
+//
+// Created by Jon Petersson on 2023-09-07.
+// Copyright © 2023 Mullvad VPN AB. All rights reserved.
+//
+
+import Foundation
+
+public protocol OperationBlockObserverSupport {}
+
+extension OperationBlockObserverSupport where Self: AsyncOperation {
+ /// Add observer responding to cancellation event.
+ public func onCancel(_ fn: @escaping (Self) -> Void) {
+ addBlockObserver(OperationBlockObserver(didCancel: fn))
+ }
+
+ /// Add observer responding to finish event.
+ public func onFinish(_ fn: @escaping (Self, Error?) -> Void) {
+ addBlockObserver(OperationBlockObserver(didFinish: fn))
+ }
+
+ /// Add observer responding to start event.
+ public func onStart(_ fn: @escaping (Self) -> Void) {
+ addBlockObserver(OperationBlockObserver(didStart: fn))
+ }
+
+ /// Add block-based observer.
+ public func addBlockObserver(_ observer: OperationBlockObserver<Self>) {
+ addObserver(observer)
+ }
+
+ // swiftlint:disable:next file_length
+}