summaryrefslogtreecommitdiffhomepage
path: root/ios
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2021-09-14 11:05:32 +0200
committerAndrej Mihajlov <and@mullvad.net>2021-09-15 10:58:44 +0200
commitac96b30478d0362bdafb4585eb8f40951d8ddbd0 (patch)
tree2a2b8fb9aa0a6a4bb128020b2710a13c5c622f68 /ios
parent84ec375b8e10d350a83333ceebccbb77311dc2f8 (diff)
downloadmullvadvpn-ac96b30478d0362bdafb4585eb8f40951d8ddbd0.tar.xz
mullvadvpn-ac96b30478d0362bdafb4585eb8f40951d8ddbd0.zip
Promise: add flatMapErrorThen
Diffstat (limited to 'ios')
-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 {