diff --git a/libraries/coroutines/src/main/java/com/raxdenstudios/commons/coroutines/ext/AnswerExtension.kt b/libraries/coroutines/src/main/java/com/raxdenstudios/commons/coroutines/ext/AnswerExtension.kt index 7417753f..9dfc1a3a 100644 --- a/libraries/coroutines/src/main/java/com/raxdenstudios/commons/coroutines/ext/AnswerExtension.kt +++ b/libraries/coroutines/src/main/java/com/raxdenstudios/commons/coroutines/ext/AnswerExtension.kt @@ -74,9 +74,15 @@ suspend fun Flow>.collectResult( onFailure: (E) -> Unit, ) = collect { result -> result.fold(onSuccess, onFailure) } -fun Flow.toAnswer() = - map { data -> Answer.Success(data) } - .catch { error -> Answer.Failure(error) } +fun Flow.toAnswer(): Flow> = + toAnswer { error -> error } + +fun Flow.toAnswer( + mapFailure: (Throwable) -> E, +): Flow> { + val answers: Flow> = map { data -> Answer.Success(data) } + return answers.catch { error -> emit(Answer.Failure(mapFailure(error))) } +} @Suppress("UNCHECKED_CAST") suspend fun Answer.coCombine( diff --git a/libraries/coroutines/src/test/java/com/raxdenstudios/commons/coroutines/ext/AnswerExtensionTest.kt b/libraries/coroutines/src/test/java/com/raxdenstudios/commons/coroutines/ext/AnswerExtensionTest.kt index 6edd4c22..82f27749 100644 --- a/libraries/coroutines/src/test/java/com/raxdenstudios/commons/coroutines/ext/AnswerExtensionTest.kt +++ b/libraries/coroutines/src/test/java/com/raxdenstudios/commons/coroutines/ext/AnswerExtensionTest.kt @@ -221,6 +221,20 @@ internal class AnswerExtensionTest { val result1 = awaitItem() assertThat(result1.isSuccess).isTrue() assertThat(result1).isEqualTo(Answer.Success("value")) + + val result2 = awaitItem() + assertThat(result2.isFailure).isTrue() + assertThat((result2 as Answer.Failure).value.message).isEqualTo("Test error") + awaitComplete() + } + } + + @Test + fun `use toAnswer with mapped failure`() = runTest { + val flowData = flow { error("Test error") } + + flowData.toAnswer { error -> "Mapped: ${error.message}" }.test { + assertThat(awaitItem()).isEqualTo(Answer.Failure("Mapped: Test error")) awaitComplete() } }