Compare commits

..

8 Commits

6 changed files with 59 additions and 10 deletions

View File

@@ -1,5 +1,20 @@
# Changelog
## 0.26.9
* `Coroutines`:
* `runCatchingLogging` updated to rethrow `CancellationException` and log other exceptions
## 0.26.8
* `Versions`:
* `KSLog`: `1.5.1` -> `1.5.2`
* `Compose`: `1.9.2` -> `1.9.3`
* `Ktor`: `3.3.1` -> `3.3.2`
* `Coroutines`:
* Add simple suspend function `suspendPoint` which will ensure that current coroutine is active to let it be
destroyable even in case it have non-suspendable nature
## 0.26.7
* `Versions`:

View File

@@ -2,11 +2,27 @@ package dev.inmo.micro_utils.coroutines
import dev.inmo.kslog.common.KSLog
import dev.inmo.kslog.common.e
import kotlin.coroutines.cancellation.CancellationException
/**
* Executes the given [block] within a `runCatching` context and logs any exceptions that occur, excluding
* `CancellationException` which is rethrown. This method simplifies error handling by automatically logging
* the errors using the provided [logger].
*
* @param T The result type of the [block].
* @param R The receiver type on which this function operates.
* @param errorMessageBuilder A lambda to build the error log message. By default, it returns a generic error message.
* @param logger The logging instance used for logging errors. Defaults to [KSLog].
* @param block The code block to execute within the `runCatching` context.
* @return A [Result] representing the outcome of executing the [block].
*/
inline fun <T, R> R.runCatchingLogging(
noinline errorMessageBuilder: R.(Throwable) -> Any = { "Something web wrong" },
logger: KSLog = KSLog,
block: R.() -> T
) = runCatching(block).onFailure {
logger.e(it) { errorMessageBuilder(it) }
when (it) {
is CancellationException -> throw it
else -> logger.e(it) { errorMessageBuilder(it) }
}
}

View File

@@ -0,0 +1,15 @@
package dev.inmo.micro_utils.coroutines
import kotlinx.coroutines.currentCoroutineContext
import kotlinx.coroutines.ensureActive
/**
* Ensures that the current coroutine context is still active and throws a [kotlinx.coroutines.CancellationException]
* if the coroutine has been canceled.
*
* This function provides a convenient way to check the active status of a coroutine, which is useful
* to identify cancellation points in long-running or suspendable operations.
*
* @throws kotlinx.coroutines.CancellationException if the coroutine context is no longer active.
*/
suspend fun suspendPoint() = currentCoroutineContext().ensureActive()

View File

@@ -18,5 +18,5 @@ crypto_js_version=4.1.1
# Project data
group=dev.inmo
version=0.26.7
android_code_version=306
version=0.26.9
android_code_version=307

View File

@@ -6,9 +6,9 @@ kt-coroutines = "1.10.2"
kotlinx-browser = "0.5.0"
kslog = "1.5.1"
kslog = "1.5.2"
jb-compose = "1.9.2"
jb-compose = "1.9.3"
jb-compose-material3 = "1.9.0"
jb-compose-icons = "1.7.8"
jb-exposed = "0.61.0"
@@ -20,7 +20,7 @@ sqlite = "3.50.1.0"
korlibs = "5.4.0"
uuid = "0.8.4"
ktor = "3.3.1"
ktor = "3.3.2"
gh-release = "2.5.2"
@@ -28,13 +28,13 @@ koin = "4.1.1"
okio = "3.16.2"
ksp = "2.3.1"
ksp = "2.3.2"
kotlin-poet = "2.2.0"
versions = "0.52.0"
versions = "0.53.0"
nmcp = "1.2.0"
android-gradle = "8.10.+"
android-gradle = "8.12.+"
dexcount = "4.0.0"
android-coreKtx = "1.17.0"

View File

@@ -1,6 +1,9 @@
kotlin {
androidTarget {
publishAllLibraryVariants()
publishLibraryVariants(
"release",
"debug",
)
compilations.all {
kotlinOptions {
jvmTarget = "17"