From 8a445f78e45839fe832ee2fe787c9aa015d9dade Mon Sep 17 00:00:00 2001 From: machiav3lli Date: Thu, 31 Mar 2022 10:58:42 +0200 Subject: [PATCH] Add: Utils to (de)serialize lists --- .../looker/droidify/utility/extension/Json.kt | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/main/kotlin/com/looker/droidify/utility/extension/Json.kt b/src/main/kotlin/com/looker/droidify/utility/extension/Json.kt index fb1973e8..c3c8de1e 100644 --- a/src/main/kotlin/com/looker/droidify/utility/extension/Json.kt +++ b/src/main/kotlin/com/looker/droidify/utility/extension/Json.kt @@ -81,6 +81,22 @@ fun JsonParser.collectDistinctNotEmptyStrings(): List { return collectNotNullStrings().asSequence().filter { it.isNotEmpty() }.distinct().toList() } +fun JsonParser.collectList(arrayName: String, callback: JsonParser.() -> T?): MutableList { + val list = mutableListOf() + forEachKey { + when { + it.array(arrayName) -> + list.addAll( + collectNotNull(JsonToken.START_OBJECT) { + callback() + } + ) + else -> skipChildren() + } + } + return list +} + inline fun 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 JsonGenerator.writeList(listName: String, list: List, callback: T.() -> Unit) { + writeArray(listName) { + list.forEach { writeDictionary { it.callback() } } + } +} \ No newline at end of file