diff options
| -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 { |
