Add: Utils to (de)serialize lists

This commit is contained in:
machiav3lli 2022-03-31 10:58:42 +02:00
parent 7f33d6efc7
commit 8a445f78e4

View File

@ -81,6 +81,22 @@ fun JsonParser.collectDistinctNotEmptyStrings(): List<String> {
return collectNotNullStrings().asSequence().filter { it.isNotEmpty() }.distinct().toList()
}
fun <T> JsonParser.collectList(arrayName: String, callback: JsonParser.() -> T?): MutableList<T> {
val list = mutableListOf<T>()
forEachKey {
when {
it.array(arrayName) ->
list.addAll(
collectNotNull(JsonToken.START_OBJECT) {
callback()
}
)
else -> skipChildren()
}
}
return list
}
inline fun <T> JsonParser.parseDictionary(callback: JsonParser.() -> T): T {
if (nextToken() == JsonToken.START_OBJECT) {
val result = callback()
@ -104,3 +120,9 @@ inline fun JsonGenerator.writeArray(fieldName: String, callback: JsonGenerator.(
callback()
writeEndArray()
}
inline fun <T> JsonGenerator.writeList(listName: String, list: List<T>, callback: T.() -> Unit) {
writeArray(listName) {
list.forEach { writeDictionary { it.callback() } }
}
}