dev.inmo.plagubot.PluginSerializer.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of plagubot.plugin Show documentation
Show all versions of plagubot.plugin Show documentation
Base dependency for whole PlaguBot project
The newest version!
package dev.inmo.plagubot
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
@Serializer(Plugin::class)
class PluginSerializer : KSerializer {
override val descriptor: SerialDescriptor
get() = String.serializer().descriptor
override fun deserialize(decoder: Decoder): Plugin {
val kclass = Class.forName(decoder.decodeString()).kotlin
return (kclass.objectInstance ?: kclass.constructors.first { it.parameters.isEmpty() }.call()) as Plugin
}
override fun serialize(encoder: Encoder, value: Plugin) {
encoder.encodeString(
value::class.java.canonicalName
)
}
}