From 24033e0cac6638bd848f18c6f493e653ba81bec9 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 11 Jun 2021 17:32:13 +0600 Subject: [PATCH] firstNotNull and LinkedSupervisor(Job|Scope) --- CHANGELOG.md | 7 +++++++ .../micro_utils/common/IterableFirstNotNull.kt | 3 +++ .../micro_utils/coroutines/FlowFirstNotNull.kt | 6 ++++++ .../micro_utils/coroutines/SupervisorJob.kt | 17 +++++++++++++++++ 4 files changed, 33 insertions(+) create mode 100644 common/src/commonMain/kotlin/dev/inmo/micro_utils/common/IterableFirstNotNull.kt create mode 100644 coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/FlowFirstNotNull.kt create mode 100644 coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/SupervisorJob.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index bc10814a619..3c155a10ae4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ ## 0.5.8 +* `Common`: + * New extension `Iterable#firstNotNull` +* `Coroutines` + * New extension `Flow#firstNotNull` + * New extensions `CoroutineContext#LinkedSupervisorJob`, `CoroutineScope#LinkedSupervisorJob` and + `CoroutineScope#LinkedSupervisorScope` + ## 0.5.7 * `Pagination` diff --git a/common/src/commonMain/kotlin/dev/inmo/micro_utils/common/IterableFirstNotNull.kt b/common/src/commonMain/kotlin/dev/inmo/micro_utils/common/IterableFirstNotNull.kt new file mode 100644 index 00000000000..b26717d77ac --- /dev/null +++ b/common/src/commonMain/kotlin/dev/inmo/micro_utils/common/IterableFirstNotNull.kt @@ -0,0 +1,3 @@ +package dev.inmo.micro_utils.common + +fun Iterable.firstNotNull() = first { it != null }!! diff --git a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/FlowFirstNotNull.kt b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/FlowFirstNotNull.kt new file mode 100644 index 00000000000..7626f7757ed --- /dev/null +++ b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/FlowFirstNotNull.kt @@ -0,0 +1,6 @@ +package dev.inmo.micro_utils.coroutines + +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.first + +suspend fun Flow.firstNotNull() = first { it != null }!! diff --git a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/SupervisorJob.kt b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/SupervisorJob.kt new file mode 100644 index 00000000000..df4131ddecd --- /dev/null +++ b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/SupervisorJob.kt @@ -0,0 +1,17 @@ +package dev.inmo.micro_utils.coroutines + +import kotlinx.coroutines.* +import kotlin.coroutines.CoroutineContext + +fun CoroutineContext.LinkedSupervisorJob( + additionalContext: CoroutineContext? = null +) = SupervisorJob(job).let { if (additionalContext != null) it + additionalContext else it } +fun CoroutineScope.LinkedSupervisorJob( + additionalContext: CoroutineContext? = null +) = coroutineContext.LinkedSupervisorJob(additionalContext) + +fun CoroutineScope.LinkedSupervisorScope( + additionalContext: CoroutineContext? = null +) = CoroutineScope( + coroutineContext + LinkedSupervisorJob(additionalContext) +)