Skip to content

Commit a7edd80

Browse files
authored
added TaskResult.foldResult (#242)
1 parent ae8319c commit a7edd80

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

src/FsToolkit.ErrorHandling.TaskResult/TaskResult.fs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,3 +250,10 @@ module TaskResult =
250250
Result.requireNone error
251251
>> Task.singleton
252252
)
253+
254+
let inline foldResult
255+
([<InlineIfLambda>] onSuccess: 'input -> 'output)
256+
([<InlineIfLambda>] onError: 'inputError -> 'output)
257+
(input: Task<Result<'input, 'inputError>>)
258+
: Task<'output> =
259+
Task.map (Result.either onSuccess onError) input

tests/FsToolkit.ErrorHandling.TaskResult.Tests/TaskResult.fs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -815,3 +815,27 @@ let TaskResultBindRequireTests =
815815
|> Expect.hasTaskOkValue "john_doe"
816816
}
817817
]
818+
819+
[<Tests>]
820+
let foldResultTests =
821+
testList "TaskResult.foldResult tests" [
822+
testCaseTask "foldResult with Task(Ok x)"
823+
<| fun _ ->
824+
task {
825+
let! actual =
826+
createPostSuccess validCreatePostRequest
827+
|> TaskResult.foldResult (fun (PostId id) -> id.ToString()) string
828+
829+
Expect.same (newPostId.ToString()) actual
830+
}
831+
832+
testCaseTask "foldResult with Task(Error x)"
833+
<| fun _ ->
834+
task {
835+
let! actual =
836+
createPostFailure validCreatePostRequest
837+
|> TaskResult.foldResult string (fun ex -> ex.Message)
838+
839+
Expect.same (commonEx.Message) actual
840+
}
841+
]

0 commit comments

Comments
 (0)