SauceNaoAnswer#row

This commit is contained in:
2019-10-12 13:00:38 +06:00
parent 1ee9e6a42c
commit e04ee7300c
3 changed files with 38 additions and 5 deletions

View File

@@ -1,9 +1,40 @@
package com.github.insanusmokrassar.SauceNaoAPI.models
import kotlinx.serialization.Serializable
import kotlinx.serialization.*
import kotlinx.serialization.internal.ArrayListSerializer
import kotlinx.serialization.json.*
@Serializable
@Serializable(SauceNaoAnswerSerializer::class)
data class SauceNaoAnswer(
val header: Header,
val results: List<Result> = emptyList()
val results: List<Result> = emptyList(),
val raw: JsonObject
)
@Serializer(SauceNaoAnswer::class)
object SauceNaoAnswerSerializer : KSerializer<SauceNaoAnswer> {
private val resultsSerializer = ArrayListSerializer(Result.serializer())
private const val headerField = "header"
private const val resultsField = "results"
private val serializer = Json.nonstrict
override fun deserialize(decoder: Decoder): SauceNaoAnswer {
val raw = JsonObjectSerializer.deserialize(decoder)
val header = serializer.fromJson(Header.serializer(), raw.getObject(headerField))
val results = serializer.fromJson(resultsSerializer, raw.getArray(resultsField))
return SauceNaoAnswer(header, results, raw)
}
override fun serialize(encoder: Encoder, obj: SauceNaoAnswer) {
val resultObject = JsonObject(
obj.raw.content.let {
it + mapOf(
headerField to serializer.toJson(Header.serializer(), obj.header),
resultsField to serializer.toJson(resultsSerializer, obj.results)
)
}
)
JsonObject.serializer().serialize(encoder, resultObject)
}
}