diff --git a/CHANGELOG.md b/CHANGELOG.md index 54b0a346e3e..3daac0f5929 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 0.8.5 + +* `Common`: + * `repeatOnFailure` + ## 0.8.4 * `Ktor`: diff --git a/common/src/commonMain/kotlin/dev/inmo/micro_utils/common/RepeatOnFailure.kt b/common/src/commonMain/kotlin/dev/inmo/micro_utils/common/RepeatOnFailure.kt new file mode 100644 index 00000000000..409df8d2e98 --- /dev/null +++ b/common/src/commonMain/kotlin/dev/inmo/micro_utils/common/RepeatOnFailure.kt @@ -0,0 +1,21 @@ +package dev.inmo.micro_utils.common + +/** + * Executes the given [action] until getting of successful result specified number of [times]. + * + * A zero-based index of current iteration is passed as a parameter to [action]. + */ +inline fun repeatOnFailure( + times: Int, + onEachFailure: (Throwable) -> Unit = {}, + action: (Int) -> R +): Optional { + repeat(times) { + runCatching { + action(it) + }.onFailure(onEachFailure).onSuccess { + return Optional.presented(it) + } + } + return Optional.absent() +} diff --git a/gradle.properties b/gradle.properties index 0fbc652493f..22103b0dee3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -45,5 +45,5 @@ dokka_version=1.5.31 # Project data group=dev.inmo -version=0.8.4 -android_code_version=84 +version=0.8.5 +android_code_version=85