35 lines
1.2 KiB
Kotlin
35 lines
1.2 KiB
Kotlin
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
|
|
)
|
|
}
|
|
}
|
|
}
|