diff options
| author | Andrej Mihajlov <and@mullvad.net> | 2021-09-14 11:05:32 +0200 |
|---|---|---|
| committer | Andrej Mihajlov <and@mullvad.net> | 2021-09-15 10:58:44 +0200 |
| commit | ac96b30478d0362bdafb4585eb8f40951d8ddbd0 (patch) | |
| tree | 2a2b8fb9aa0a6a4bb128020b2710a13c5c622f68 /ios | |
| parent | 84ec375b8e10d350a83333ceebccbb77311dc2f8 (diff) | |
| download | mullvadvpn-ac96b30478d0362bdafb4585eb8f40951d8ddbd0.tar.xz mullvadvpn-ac96b30478d0362bdafb4585eb8f40951d8ddbd0.zip | |
Promise: add flatMapErrorThen
Diffstat (limited to 'ios')
| -rw-r--r-- | ios/MullvadVPN/Promise/Promise+Result.swift | 12 |
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 { |
