
de.lancom.openapi.jackson.EntitySerializer.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of openapi-parser Show documentation
Show all versions of openapi-parser Show documentation
This open-source project provides an OpenAPI 3.0 Parser implemented in Kotlin, utilizing immutable data classes
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