mirror of
https://github.com/InsanusMokrassar/SDI.git
synced 2025-12-04 20:15:37 +00:00
updates
This commit is contained in:
@@ -33,4 +33,7 @@ fun loadModule(
|
||||
json: String,
|
||||
vararg additionalClassesToInclude: KClass<*>,
|
||||
moduleBuilder: (SerializersModuleBuilder.() -> Unit)? = null
|
||||
): Module = nonStrictJson.loadModule(json, *additionalClassesToInclude, moduleBuilder = moduleBuilder)
|
||||
): Module = nonStrictJson.loadModule(json, *additionalClassesToInclude) {
|
||||
includeClassesForSDI()
|
||||
moduleBuilder ?.invoke(this)
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package dev.inmo.sdi
|
||||
|
||||
import kotlinx.serialization.Contextual
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable(ModuleFullSerializer::class)
|
||||
class Module internal constructor(base: Map<String, @Contextual Any>) : Map<String, Any> by base
|
||||
@@ -6,6 +6,7 @@ import kotlinx.serialization.builtins.MapSerializer
|
||||
import kotlinx.serialization.builtins.serializer
|
||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
import kotlinx.serialization.json.*
|
||||
import kotlinx.serialization.modules.SerializersModuleBuilder
|
||||
import kotlin.reflect.KClass
|
||||
@@ -14,6 +15,8 @@ internal class ModuleDeserializerStrategy(
|
||||
private val moduleBuilder: (SerializersModuleBuilder.() -> Unit)? = null,
|
||||
private vararg val additionalClassesToInclude: KClass<*>
|
||||
) : DeserializationStrategy<Module> {
|
||||
constructor() : this(null)
|
||||
|
||||
private val internalSerializer = MapSerializer(String.serializer(), ContextualSerializer(Any::class))
|
||||
override val descriptor: SerialDescriptor
|
||||
get() = internalSerializer.descriptor
|
||||
@@ -34,3 +37,14 @@ internal class ModuleDeserializerStrategy(
|
||||
return Module(map)
|
||||
}
|
||||
}
|
||||
|
||||
@Serializer(Module::class)
|
||||
internal class ModuleFullSerializer(
|
||||
private val moduleBuilder: (SerializersModuleBuilder.() -> Unit)? = null,
|
||||
private vararg val additionalClassesToInclude: KClass<*>
|
||||
) : KSerializer<Module>,
|
||||
DeserializationStrategy<Module> by ModuleDeserializerStrategy(moduleBuilder, *additionalClassesToInclude) {
|
||||
constructor() : this(null)
|
||||
|
||||
override fun serialize(encoder: Encoder, value: Module) = throw NotImplementedError("Currently there is no support for serialization of modules")
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package dev.inmo.sdi
|
||||
|
||||
import org.atteo.classindex.ClassIndex
|
||||
import org.atteo.classindex.IndexAnnotated
|
||||
import com.github.matfax.klassindex.IndexAnnotated
|
||||
import com.github.matfax.klassindex.KlassIndex
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
@Retention(AnnotationRetention.RUNTIME)
|
||||
@@ -9,10 +9,10 @@ import kotlin.reflect.KClass
|
||||
@IndexAnnotated
|
||||
actual annotation class SDIIncluded actual constructor(actual val customNames: Array<String>)
|
||||
|
||||
internal actual fun getClassesForIncludingInSDI(): List<Pair<KClass<*>, List<String>>> = ClassIndex.getAnnotated(
|
||||
SDIIncluded::class.java
|
||||
internal actual fun getClassesForIncludingInSDI(): List<Pair<KClass<*>, List<String>>> = KlassIndex.getAnnotated(
|
||||
SDIIncluded::class
|
||||
).map {
|
||||
it.kotlin.let {
|
||||
it.let {
|
||||
it to it.annotations.flatMap { (it as? SDIIncluded) ?.customNames ?.toList() ?: emptyList() }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user