All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.lightningkite.lightningdb.KPropertySerialization.kt Maven / Gradle / Ivy

@file:Suppress("OPT_IN_USAGE")

package com.lightningkite.lightningdb

import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.InternalSerializationApi
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.descriptors.SerialKind
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.internal.GeneratedSerializer
import java.lang.reflect.ParameterizedType
import java.lang.reflect.Type
import java.lang.reflect.TypeVariable
import kotlin.reflect.full.memberProperties
import kotlin.reflect.KProperty1

@OptIn(InternalSerializationApi::class)
fun  KSerializer.attemptGrabFields(): Map> = this::class.java.genericInterfaces
    .asSequence()
    .filterIsInstance()
    .filter { it.rawType == GeneratedSerializer::class.java }
    .first()
    .actualTypeArguments
    .first()
    .clazz()
    .kotlin
    .memberProperties
    .associate {
        @Suppress("UNCHECKED_CAST")
        it.name to (it as KProperty1)
    }

private fun Type.clazz(): Class<*> = when (this) {
    is ParameterizedType -> this.rawType.clazz()
    is Class<*> -> this
    else -> TODO()
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy