SauceNaoAPI/src/main/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/Header.kt

60 lines
2.1 KiB
Kotlin
Raw Normal View History

2019-02-20 04:06:04 +00:00
package com.github.insanusmokrassar.SauceNaoAPI.models
2019-03-21 04:25:23 +00:00
import com.github.insanusmokrassar.SauceNaoAPI.utils.JsonObjectSerializer
import kotlinx.serialization.*
2019-04-22 01:55:01 +00:00
import kotlinx.serialization.internal.StringDescriptor
import kotlinx.serialization.json.Json
2019-02-20 04:06:04 +00:00
@Serializable
data class Header(
@SerialName("status")
2019-05-16 11:04:58 +00:00
val status: Int? = null,
2019-02-20 04:06:04 +00:00
@SerialName("results_requested")
2019-05-16 11:04:58 +00:00
val resultsRequested: Int? = null,
2019-03-21 04:25:23 +00:00
@Serializable(IndexesSerializer::class)
2019-02-20 04:06:04 +00:00
@SerialName("index")
2019-05-16 11:04:58 +00:00
val indexes: List<HeaderIndex?> = emptyList(),
2019-02-20 04:06:04 +00:00
@SerialName("search_depth")
2019-05-16 11:04:58 +00:00
val searchDepth: Int? = null,
2019-02-20 04:06:04 +00:00
@SerialName("minimum_similarity")
2019-05-16 11:04:58 +00:00
val minSimilarity: Float? = null,
@SerialName("results_returned")
val resultsCount: Int? = null,
2019-02-20 04:06:04 +00:00
@SerialName("query_image_display")
2019-05-16 11:04:58 +00:00
val queryImageDisplay: String? = null, // something like "userdata/uuid.png",
2019-02-20 04:06:04 +00:00
@SerialName("query_image")
2019-05-16 11:04:58 +00:00
val queryImage: String? = null, // something like "uuid.jpg"
@SerialName("short_remaining")
val shortRemaining: Int? = null,
@SerialName("long_remaining")
val longRemaining: Int? = null,
@SerialName("short_limit")
val shortLimit: Int? = null,
@SerialName("long_limit")
val longLimit: Int? = null,
@SerialName("account_type")
2019-05-16 11:04:58 +00:00
val accountType: Int? = null,
@SerialName("user_id")
val userId: Int? = null
2019-02-20 04:06:04 +00:00
)
2019-03-21 04:25:23 +00:00
object IndexesSerializer : KSerializer<List<HeaderIndex?>> {
override val descriptor: SerialDescriptor = StringDescriptor
override fun deserialize(decoder: Decoder): List<HeaderIndex?> {
val json = decoder.decodeSerializableValue(JsonObjectSerializer)
val parsed = json.keys.mapNotNull { it.toIntOrNull() }.sorted().mapNotNull {
val jsonObject = json.getObjectOrNull(it.toString()) ?: return@mapNotNull null
val index = Json.nonstrict.parse(HeaderIndex.serializer(), Json.stringify(JsonObjectSerializer, jsonObject))
it to index
}.toMap()
return Array<HeaderIndex?>(parsed.keys.max() ?: 0) {
parsed[it]
}.toList()
}
override fun serialize(encoder: Encoder, obj: List<HeaderIndex?>) {
TODO()
}
}