Skip to content

Instantly share code, notes, and snippets.

@manmal
Created August 28, 2024 20:10
Show Gist options
  • Save manmal/f5278ff063122c028fe01508d198d7dc to your computer and use it in GitHub Desktop.
Save manmal/f5278ff063122c028fe01508d198d7dc to your computer and use it in GitHub Desktop.
ResultAsyncExtensions
import Foundation
extension Result {
public func flatMap<NewSuccess>(
_ transform: (Success) async -> Result<NewSuccess, Failure>
) async -> Result<NewSuccess, Failure> {
switch self {
case let .success(success):
await transform(success)
case let .failure(error):
.failure(error)
}
}
public func flatMapError<NewFailure>(
_ transform: (Failure) async -> Result<Success, NewFailure>
) async -> Result<Success, NewFailure> {
switch self {
case let .success(success):
.success(success)
case let .failure(error):
await transform(error)
}
}
public func map<NewSuccess>(
_ transform: (Success) async -> NewSuccess
) async -> Result<NewSuccess, Failure> {
switch self {
case let .success(success):
await .success(transform(success))
case let .failure(error):
.failure(error)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment