mirror of
https://github.com/InsanusMokrassar/SDI.git
synced 2024-06-01 23:45:12 +00:00
26 lines
823 B
Kotlin
26 lines
823 B
Kotlin
package dev.inmo.sdi
|
|
|
|
import kotlinx.serialization.InternalSerializationApi
|
|
import kotlinx.serialization.modules.SerializersModuleBuilder
|
|
import kotlinx.serialization.serializer
|
|
import kotlin.reflect.KClass
|
|
|
|
@Retention(AnnotationRetention.RUNTIME)
|
|
@Target(AnnotationTarget.CLASS)
|
|
expect annotation class SDIIncluded(val customNames: Array<String> = [])
|
|
|
|
internal expect fun getClassesForIncludingInSDI(): List<Pair<KClass<*>, List<String>>>
|
|
|
|
@Suppress("NOTHING_TO_INLINE")
|
|
@InternalSerializationApi
|
|
private inline fun <T : Any> KClass<T>.includeInBuilder(
|
|
builder: SerializersModuleBuilder
|
|
) = builder.contextual(this, serializer())
|
|
|
|
@InternalSerializationApi
|
|
fun SerializersModuleBuilder.includeClassesForSDI() {
|
|
getClassesForIncludingInSDI().forEach { (kclass, _) ->
|
|
kclass.includeInBuilder(this)
|
|
}
|
|
}
|