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

de.lancom.openapi.jackson.EntitySerializer.kt Maven / Gradle / Ivy

Go to download

This open-source project provides an OpenAPI 3.0 Parser implemented in Kotlin, utilizing immutable data classes

There is a newer version: 2.1.1
Show newest version
package de.lancom.openapi.jackson

import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.databind.SerializerProvider
import com.fasterxml.jackson.databind.ser.std.StdSerializer
import de.lancom.openapi.entity.AdditionalPropertiesBoolean
import de.lancom.openapi.entity.Entity
import de.lancom.openapi.field.getFields

abstract class EntitySerializer(
    clazz: Class,
    val parser: Parser,
) : StdSerializer(clazz) {
    override fun serialize(value: E?, gen: JsonGenerator?, provider: SerializerProvider?) {
        if (value == null) {
            gen!!.writeNull()
        } else if (value is AdditionalPropertiesBoolean) {
            gen!!.writeObject(true)
        } else {
            val entityDescriptor = value.entityDescriptor
            val entityJson = entityDescriptor.jsonNode
            if (entityJson != null) {
                if (entityJson.isDefined) {
                    gen!!.writeObject(entityJson.orNull)
                } else {
                    gen!!.writeStartObject()
                    gen.writeEndObject()
                }
            } else {
                val flatten = entityDescriptor.flatten.getFields().filter { entry ->
                    entry !is Map<*, *>
                }
                val size = flatten.size
                when (size) {
                    0 ->
                        gen!!.writeObject(entityDescriptor.entityMap.sorted())

                    1 ->
                        gen!!.writeObject(flatten.first())

                    else ->
                        TODO()
                }
            }
        }
    }
}

private fun  Map.sorted(): Map {
    return toList()
        .sortedBy { (key, _) ->
            key.toString()
        }
        .toMap()
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy