Empty meta is represented by empty json object
This commit is contained in:
parent
90a92c4121
commit
28a6914747
@ -4,7 +4,7 @@ plugins {
|
|||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
group = "space.kscience"
|
group = "space.kscience"
|
||||||
version = "0.5.0-dev-6"
|
version = "0.5.0-dev-7"
|
||||||
}
|
}
|
||||||
|
|
||||||
subprojects {
|
subprojects {
|
||||||
|
@ -28,26 +28,22 @@ public fun Value.toJson(descriptor: MetaDescriptor? = null): JsonElement = when
|
|||||||
private fun String.toJsonKey(descriptor: MetaDescriptor?) = descriptor?.attributes?.get("jsonName").string ?: toString()
|
private fun String.toJsonKey(descriptor: MetaDescriptor?) = descriptor?.attributes?.get("jsonName").string ?: toString()
|
||||||
|
|
||||||
private fun Meta.toJsonWithIndex(descriptor: MetaDescriptor?, index: String?): JsonElement = if (items.isEmpty()) {
|
private fun Meta.toJsonWithIndex(descriptor: MetaDescriptor?, index: String?): JsonElement = if (items.isEmpty()) {
|
||||||
value?.toJson(descriptor) ?: JsonNull
|
value?.toJson(descriptor) ?: JsonObject(emptyMap())
|
||||||
} else {
|
} else {
|
||||||
val pairs: MutableList<Pair<String, JsonElement>> = items.entries.groupBy {
|
val pairs: MutableList<Pair<String, JsonElement>> = items.entries.groupBy {
|
||||||
it.key.body
|
it.key.body
|
||||||
}.mapNotNullTo(ArrayList()) { (body, list) ->
|
}.mapTo(ArrayList()) { (body, list) ->
|
||||||
val childDescriptor = descriptor?.children?.get(body)
|
val childDescriptor = descriptor?.children?.get(body)
|
||||||
if (list.size == 1) {
|
if (list.size == 1) {
|
||||||
val (token, element) = list.first()
|
val (token, element) = list.first()
|
||||||
//do not add empty element
|
//do not add empty element
|
||||||
if (!element.isEmpty()) {
|
val child: JsonElement = element.toJsonWithIndex(childDescriptor, token.index)
|
||||||
val child: JsonElement = element.toJsonWithIndex(childDescriptor, token.index)
|
body to child
|
||||||
body to child
|
|
||||||
} else null
|
|
||||||
} else {
|
} else {
|
||||||
val elements: List<JsonElement> = list.sortedBy { it.key.index }.mapIndexedNotNull { index, entry ->
|
val elements: List<JsonElement> = list.sortedBy { it.key.index }.mapIndexed { index, entry ->
|
||||||
if (!entry.value.isEmpty()) {
|
//Use index if it is not equal to the item order
|
||||||
//Use index if it is not equal to the item order
|
val actualIndex = if (index.toString() != entry.key.index) entry.key.index else null
|
||||||
val actualIndex = if (index.toString() != entry.key.index) entry.key.index else null
|
entry.value.toJsonWithIndex(childDescriptor, actualIndex)
|
||||||
entry.value.toJsonWithIndex(childDescriptor, actualIndex)
|
|
||||||
} else null
|
|
||||||
}
|
}
|
||||||
body to JsonArray(elements)
|
body to JsonArray(elements)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user