72 lines
2.7 KiB
Kotlin
72 lines
2.7 KiB
Kotlin
package dev.inmo.postssystem.features.common.common
|
|
|
|
import dev.inmo.micro_utils.coroutines.LinkedSupervisorScope
|
|
import dev.inmo.micro_utils.fsm.common.StatesMachine
|
|
import dev.inmo.micro_utils.fsm.common.dsl.FSMBuilder
|
|
import dev.inmo.micro_utils.fsm.common.managers.DefaultStatesManagerRepo
|
|
import dev.inmo.micro_utils.repos.KeyValueRepo
|
|
import dev.inmo.postssystem.features.common.common.ui.fsm.*
|
|
import kotlinx.coroutines.CoroutineScope
|
|
import kotlinx.coroutines.Dispatchers
|
|
import kotlinx.serialization.BinaryFormat
|
|
import kotlinx.serialization.StringFormat
|
|
import kotlinx.serialization.cbor.Cbor
|
|
import kotlinx.serialization.json.Json
|
|
import kotlinx.serialization.modules.SerializersModule
|
|
import org.koin.core.Koin
|
|
import org.koin.core.context.startKoin
|
|
import org.koin.core.scope.Scope
|
|
import org.koin.dsl.module
|
|
|
|
/**
|
|
* Entrypoint for getting [org.koin.core.Koin] DI for the client
|
|
*
|
|
* @param repoFactory Factory for creating of [DefaultStatesManagerRepo] for [dev.inmo.postssystem.client.ui.fsm.UIFSM]
|
|
*/
|
|
fun baseKoin(
|
|
defaultScope: CoroutineScope,
|
|
settingsFactory: Scope.() -> KeyValueRepo<String, Any>,
|
|
repoFactory: Scope.() -> DefaultStatesManagerRepo<UIFSMState>,
|
|
handlersSetter: Pair<Scope, FSMBuilder<UIFSMState>>.() -> Unit
|
|
): Koin = startKoin {
|
|
modules(
|
|
module {
|
|
single {
|
|
Json {
|
|
ignoreUnknownKeys = true
|
|
serializersModule = SerializersModule { get<SerializersModuleConfigurator>().apply { invoke() } }
|
|
}
|
|
}
|
|
single<StringFormat> { get<Json>() }
|
|
single {
|
|
Cbor { serializersModule = SerializersModule { get<SerializersModuleConfigurator>().apply { invoke() } } }
|
|
}
|
|
single<BinaryFormat> { get<Cbor>() }
|
|
|
|
single(DefaultQualifiers.SettingsQualifier) { settingsFactory() }
|
|
single { DBDropper(get(DefaultQualifiers.SettingsQualifier)) }
|
|
single(DefaultQualifiers.FSMHandlersBuilderQualifier) { handlersSetter }
|
|
single { repoFactory() }
|
|
single { defaultScope }
|
|
single(DefaultQualifiers.UIScopeQualifier) { get<CoroutineScope>().LinkedSupervisorScope(Dispatchers.Main) }
|
|
single<StatesMachine<UIFSMState>>(DefaultQualifiers.UIFSMQualifier) {
|
|
UIFSM(get()) {
|
|
(this@single to this@UIFSM).apply(get(DefaultQualifiers.FSMHandlersBuilderQualifier))
|
|
}
|
|
}
|
|
} + AdditionalModules.Default.modules.map {
|
|
module {
|
|
with(it) {
|
|
load()
|
|
}
|
|
}
|
|
}
|
|
)
|
|
}.koin.apply {
|
|
loadModules(
|
|
listOf(
|
|
module { single<Koin> { this@apply } }
|
|
)
|
|
)
|
|
}
|