All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.kotlinw.util.coroutine.FunctionUtils.kt Maven / Gradle / Ivy

package kotlinw.util.coroutine

import com.github.michaelbull.result.Result
import com.github.michaelbull.result.onFailure
import com.github.michaelbull.result.onSuccess
import com.github.michaelbull.result.runCatching
import kotlinx.coroutines.currentCoroutineContext
import kotlinx.coroutines.delay
import kotlinx.coroutines.ensureActive
import kotlin.time.Duration

suspend inline fun  retryUntilSuccessful(
    delayAfterFailure: Duration = Duration.ZERO,
    noinline onFailure: (E) -> Unit = {},
    block: () -> Result
): V {
    while (true) {
        block()
            .onSuccess { return it }
            .onFailure(onFailure)

        currentCoroutineContext().ensureActive()
        delay(delayAfterFailure)
    }
}

suspend inline fun  retryUntilNoExceptionThrown(
    delayAfterException: Duration = Duration.ZERO,
    noinline onException: (Throwable) -> Unit = {},
    block: () -> V
): V =
    retryUntilSuccessful(delayAfterException, onException) {
        runCatching { block() }
    }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy