From 1db2f3256de5f175c93895487668ff91def003c5 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Fri, 9 Sep 2022 11:47:37 +0530 Subject: [PATCH] coroutine-utils: init --- coroutine-utils/build.gradle.kts | 9 +++++++++ .../util/coroutines/DispatcherProvider.kt | 20 +++++++++++++++++++ settings.gradle.kts | 1 + 3 files changed, 30 insertions(+) create mode 100644 coroutine-utils/build.gradle.kts create mode 100644 coroutine-utils/src/main/kotlin/dev/msfjarvis/claw/util/coroutines/DispatcherProvider.kt diff --git a/coroutine-utils/build.gradle.kts b/coroutine-utils/build.gradle.kts new file mode 100644 index 00000000..71a0b030 --- /dev/null +++ b/coroutine-utils/build.gradle.kts @@ -0,0 +1,9 @@ +plugins { + kotlin("jvm") + id("dev.msfjarvis.claw.kotlin-library") +} + +dependencies { + api(libs.kotlinx.coroutines.core) + implementation(libs.dagger.hilt.core) +} diff --git a/coroutine-utils/src/main/kotlin/dev/msfjarvis/claw/util/coroutines/DispatcherProvider.kt b/coroutine-utils/src/main/kotlin/dev/msfjarvis/claw/util/coroutines/DispatcherProvider.kt new file mode 100644 index 00000000..b156c60c --- /dev/null +++ b/coroutine-utils/src/main/kotlin/dev/msfjarvis/claw/util/coroutines/DispatcherProvider.kt @@ -0,0 +1,20 @@ +package dev.msfjarvis.claw.util.coroutines + +import javax.inject.Inject +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.ExperimentalCoroutinesApi + +/** Interface to allow abstracting individual [CoroutineDispatcher]s out of class dependencies. */ +@OptIn(ExperimentalCoroutinesApi::class) +interface DispatcherProvider { + + fun main(): CoroutineDispatcher = Dispatchers.Main + fun default(): CoroutineDispatcher = Dispatchers.Default + fun io(): CoroutineDispatcher = Dispatchers.IO + fun unconfined(): CoroutineDispatcher = Dispatchers.Unconfined + fun database(): CoroutineDispatcher = Dispatchers.IO.limitedParallelism(1) +} + +/** Concrete type for [DispatcherProvider] with all the defaults from the class. */ +class DefaultDispatcherProvider @Inject constructor() : DispatcherProvider diff --git a/settings.gradle.kts b/settings.gradle.kts index abcb1afb..327166f0 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -106,6 +106,7 @@ include( "api", "benchmark", "common", + "coroutine-utils", "database", "metadata-extractor", "model",