From 2696e663cfe14dc72fc5c43a7155a89be3af6d0b Mon Sep 17 00:00:00 2001
From: InsanusMokrassar <ovsyannikov.alexey95@gmail.com>
Date: Wed, 14 Sep 2022 22:21:30 +0600
Subject: [PATCH] add RandomQualifier

---
 koin/src/commonMain/kotlin/FactoryWithRandomQualifier.kt    | 5 +----
 koin/src/commonMain/kotlin/RandomQualifier.kt               | 6 ++++++
 koin/src/commonMain/kotlin/SingleWithRandomQualifier.kt     | 5 +----
 .../jvmMain/kotlin/FactoryWithBindsAndRandomQualifier.kt    | 5 +----
 .../src/jvmMain/kotlin/SingleWithBindsAndRandomQualifier.kt | 3 +--
 5 files changed, 10 insertions(+), 14 deletions(-)
 create mode 100644 koin/src/commonMain/kotlin/RandomQualifier.kt

diff --git a/koin/src/commonMain/kotlin/FactoryWithRandomQualifier.kt b/koin/src/commonMain/kotlin/FactoryWithRandomQualifier.kt
index f307eadc8d2..e00675e1ff8 100644
--- a/koin/src/commonMain/kotlin/FactoryWithRandomQualifier.kt
+++ b/koin/src/commonMain/kotlin/FactoryWithRandomQualifier.kt
@@ -1,10 +1,7 @@
 package dev.inmo.micro_utils.koin
 
-import com.benasher44.uuid.uuid4
 import org.koin.core.definition.Definition
-import org.koin.core.instance.InstanceFactory
 import org.koin.core.module.Module
-import org.koin.core.qualifier.StringQualifier
 
 /**
  * Will be useful in case you need to declare some singles with one type several types, but need to separate them and do
@@ -12,4 +9,4 @@ import org.koin.core.qualifier.StringQualifier
  */
 inline fun <reified T : Any> Module.factoryWithRandomQualifier(
     noinline definition: Definition<T>
-) = factory(uuid4().toString(), definition)
+) = factory(RandomQualifier(), definition)
diff --git a/koin/src/commonMain/kotlin/RandomQualifier.kt b/koin/src/commonMain/kotlin/RandomQualifier.kt
new file mode 100644
index 00000000000..9b5b1a39c62
--- /dev/null
+++ b/koin/src/commonMain/kotlin/RandomQualifier.kt
@@ -0,0 +1,6 @@
+package dev.inmo.micro_utils.koin
+
+import com.benasher44.uuid.uuid4
+import org.koin.core.qualifier.StringQualifier
+
+fun RandomQualifier(randomFun: () -> String = { uuid4().toString() }) = StringQualifier(randomFun())
diff --git a/koin/src/commonMain/kotlin/SingleWithRandomQualifier.kt b/koin/src/commonMain/kotlin/SingleWithRandomQualifier.kt
index f39aef61aea..ef7068076e2 100644
--- a/koin/src/commonMain/kotlin/SingleWithRandomQualifier.kt
+++ b/koin/src/commonMain/kotlin/SingleWithRandomQualifier.kt
@@ -1,10 +1,7 @@
 package dev.inmo.micro_utils.koin
 
-import com.benasher44.uuid.uuid4
 import org.koin.core.definition.Definition
-import org.koin.core.instance.InstanceFactory
 import org.koin.core.module.Module
-import org.koin.core.qualifier.StringQualifier
 
 /**
  * Will be useful in case you need to declare some singles with one type several types, but need to separate them and do
@@ -13,4 +10,4 @@ import org.koin.core.qualifier.StringQualifier
 inline fun <reified T : Any> Module.singleWithRandomQualifier(
     createdAtStart: Boolean = false,
     noinline definition: Definition<T>
-) = single(uuid4().toString(), createdAtStart, definition)
+) = single(RandomQualifier(), createdAtStart, definition)
diff --git a/koin/src/jvmMain/kotlin/FactoryWithBindsAndRandomQualifier.kt b/koin/src/jvmMain/kotlin/FactoryWithBindsAndRandomQualifier.kt
index 08144cf8861..6231bec8b40 100644
--- a/koin/src/jvmMain/kotlin/FactoryWithBindsAndRandomQualifier.kt
+++ b/koin/src/jvmMain/kotlin/FactoryWithBindsAndRandomQualifier.kt
@@ -1,16 +1,13 @@
 package dev.inmo.micro_utils.koin
 
-import com.benasher44.uuid.uuid4
 import org.koin.core.definition.Definition
 import org.koin.core.instance.InstanceFactory
 import org.koin.core.module.Module
-import org.koin.dsl.binds
 import kotlin.reflect.KClass
-import kotlin.reflect.full.allSuperclasses
 
 inline fun <reified T : Any> Module.factoryWithRandomQualifierAndBinds(
     bindFilter: (KClass<*>) -> Boolean = { true },
     noinline definition: Definition<T>
 ): Pair<Module, InstanceFactory<*>> {
-    return factoryWithBinds(uuid4().toString(), bindFilter, definition)
+    return factoryWithBinds(RandomQualifier(), bindFilter, definition)
 }
diff --git a/koin/src/jvmMain/kotlin/SingleWithBindsAndRandomQualifier.kt b/koin/src/jvmMain/kotlin/SingleWithBindsAndRandomQualifier.kt
index 9a5aeed6c79..3839a1dd1c3 100644
--- a/koin/src/jvmMain/kotlin/SingleWithBindsAndRandomQualifier.kt
+++ b/koin/src/jvmMain/kotlin/SingleWithBindsAndRandomQualifier.kt
@@ -1,6 +1,5 @@
 package dev.inmo.micro_utils.koin
 
-import com.benasher44.uuid.uuid4
 import org.koin.core.definition.Definition
 import org.koin.core.instance.InstanceFactory
 import org.koin.core.module.Module
@@ -11,5 +10,5 @@ inline fun <reified T : Any> Module.singleWithRandomQualifierAndBinds(
     bindFilter: (KClass<*>) -> Boolean = { true },
     noinline definition: Definition<T>
 ): Pair<Module, InstanceFactory<*>> {
-    return singleWithBinds(uuid4().toString(), createdAtStart, bindFilter, definition)
+    return singleWithBinds(RandomQualifier(), createdAtStart, bindFilter, definition)
 }