summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ios/MullvadVPN/Promise/Promise+Result.swift12
1 files changed, 12 insertions, 0 deletions
diff --git a/ios/MullvadVPN/Promise/Promise+Result.swift b/ios/MullvadVPN/Promise/Promise+Result.swift
index 4dc7509a61..575a196d51 100644
--- a/ios/MullvadVPN/Promise/Promise+Result.swift
+++ b/ios/MullvadVPN/Promise/Promise+Result.swift
@@ -99,6 +99,18 @@ extension Promise where Value: AnyResult {
return result.asConcreteType().flatMapError(transform)
}
}
+
+ /// Map failure to Result producing Promise. Passes successful result downstream.
+ func flatMapErrorThen<NewFailure>(_ transform: @escaping (Failure) -> Result<Success, NewFailure>.Promise) -> Result<Success, NewFailure>.Promise {
+ return then { result in
+ switch result.asConcreteType() {
+ case .success(let value):
+ return .success(value)
+ case .failure(let error):
+ return transform(error)
+ }
+ }
+ }
}
extension Promise where Value: AnyResult {