initialize startup module

This commit is contained in:
2022-12-05 21:19:38 +06:00
parent c5abbbbd2d
commit 369ff26627
10 changed files with 146 additions and 2 deletions

View File

@@ -0,0 +1,17 @@
plugins {
id "org.jetbrains.kotlin.multiplatform"
id "org.jetbrains.kotlin.plugin.serialization"
}
apply from: "$mppJavaProjectPresetPath"
kotlin {
sourceSets {
commonMain {
dependencies {
api libs.koin
api libs.kt.serialization
}
}
}
}

View File

@@ -0,0 +1,34 @@
package dev.inmo.micro_utils.startup.plugin
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.json.JsonObject
import org.koin.core.Koin
import org.koin.core.module.Module
@Serializable(ServerPlugin.Companion::class)
interface ServerPlugin {
fun Module.setupDI(config: JsonObject) {}
suspend fun Koin.startPlugin() {}
companion object : KSerializer<ServerPlugin> {
override val descriptor: SerialDescriptor
get() = String.serializer().descriptor
override fun deserialize(decoder: Decoder): ServerPlugin {
val kclass = Class.forName(decoder.decodeString()).kotlin
return (kclass.objectInstance ?: kclass.constructors.first { it.parameters.isEmpty() }.call()) as ServerPlugin
}
override fun serialize(encoder: Encoder, value: ServerPlugin) {
encoder.encodeString(
value::class.java.canonicalName
)
}
}
}