Skip to content

Instantly share code, notes, and snippets.

@FabianTerhorst
Created September 17, 2018 16:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save FabianTerhorst/7f7a91629b64ac52fa8395e93f0b82c4 to your computer and use it in GitHub Desktop.
Save FabianTerhorst/7f7a91629b64ac52fa8395e93f0b82c4 to your computer and use it in GitHub Desktop.
package de.everhome.sdk.json
abstract class CollectionJsonAdapter<C : MutableCollection<T>, T>(private val elementAdapter: JsonAdapter<T>) : JsonAdapter<C>() {
override fun fromJson(reader: JsonReader): C? {
if (reader.peek() != Token.BEGIN_ARRAY) {
reader.skipValue()
return null
}
val result = newCollection()
reader.beginArray()
while (reader.hasNext()) {
val value = elementAdapter.fromJson(reader)
if (value != null) {
result.add(value)
}
}
reader.endArray()
return result
}
override fun toJson(writer: JsonWriter, value: C?) {
if (value == null) return
writer.beginArray()
for (element in value) {
elementAdapter.toJson(writer, element)
}
writer.endArray()
}
abstract fun newCollection(): C
}
package de.everhome.sdk.json
class ListJsonAdapter<T>(elementAdapter: JsonAdapter<T>) : CollectionJsonAdapter<MutableList<T>, T>(elementAdapter) {
override fun newCollection(): MutableList<T> {
return mutableListOf()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment