mirror of
https://github.com/InsanusMokrassar/SauceNaoAPI.git
synced 2025-12-04 20:15:45 +00:00
upmigration
This commit is contained in:
66
src/commonMain/kotlin/dev/inmo/saucenaoapi/models/Header.kt
Normal file
66
src/commonMain/kotlin/dev/inmo/saucenaoapi/models/Header.kt
Normal file
@@ -0,0 +1,66 @@
|
||||
package dev.inmo.saucenaoapi.models
|
||||
|
||||
import dev.inmo.saucenaoapi.defaultSauceNaoParser
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.builtins.serializer
|
||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
import kotlinx.serialization.json.JsonObject
|
||||
import kotlinx.serialization.json.jsonObject
|
||||
|
||||
@Serializable
|
||||
data class Header(
|
||||
@SerialName("status")
|
||||
val status: Int? = null,
|
||||
@SerialName("results_requested")
|
||||
val resultsRequested: Int? = null,
|
||||
@Serializable(IndexesSerializer::class)
|
||||
@SerialName("index")
|
||||
val indexes: List<HeaderIndex?> = emptyList(),
|
||||
@SerialName("search_depth")
|
||||
val searchDepth: Int? = null,
|
||||
@SerialName("minimum_similarity")
|
||||
val minSimilarity: Float? = null,
|
||||
@SerialName("results_returned")
|
||||
val resultsCount: Int? = null,
|
||||
@SerialName("query_image_display")
|
||||
val queryImageDisplay: String? = null, // something like "userdata/uuid.png",
|
||||
@SerialName("query_image")
|
||||
val queryImage: String? = null, // something like "uuid.jpg"
|
||||
@SerialName("short_remaining")
|
||||
val shortRemaining: Int = Int.MAX_VALUE,
|
||||
@SerialName("long_remaining")
|
||||
val longRemaining: Int = Int.MAX_VALUE,
|
||||
@SerialName("short_limit")
|
||||
val shortLimit: Int = Int.MAX_VALUE,
|
||||
@SerialName("long_limit")
|
||||
val longLimit: Int = Int.MAX_VALUE,
|
||||
@SerialName("account_type")
|
||||
val accountType: Int? = null,
|
||||
@SerialName("user_id")
|
||||
val userId: Int? = null
|
||||
)
|
||||
|
||||
internal object IndexesSerializer : KSerializer<List<HeaderIndex?>> {
|
||||
override val descriptor: SerialDescriptor = String.serializer().descriptor
|
||||
|
||||
override fun deserialize(decoder: Decoder): List<HeaderIndex?> {
|
||||
val json = JsonObject.serializer().deserialize(decoder)
|
||||
val parsed = json.keys.mapNotNull { it.toIntOrNull() }.sorted().mapNotNull {
|
||||
val jsonObject = json[it.toString()] ?.jsonObject ?: return@mapNotNull null
|
||||
val index = defaultSauceNaoParser.decodeFromString(
|
||||
HeaderIndex.serializer(),
|
||||
defaultSauceNaoParser.encodeToString(JsonObject.serializer(), jsonObject)
|
||||
)
|
||||
it to index
|
||||
}.toMap()
|
||||
return Array<HeaderIndex?>(parsed.keys.maxOrNull() ?: 0) {
|
||||
parsed[it]
|
||||
}.toList()
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, value: List<HeaderIndex?>) {
|
||||
TODO()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package dev.inmo.saucenaoapi.models
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class HeaderIndex(
|
||||
val status: Int? = null,
|
||||
val id: Int? = null,
|
||||
val results: Int? = null,
|
||||
val parent_id: Int? = null
|
||||
)
|
||||
@@ -0,0 +1,11 @@
|
||||
package dev.inmo.saucenaoapi.models
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class LimitsState(
|
||||
val maxShortQuota: Int,
|
||||
val maxLongQuota: Int,
|
||||
val knownShortQuota: Int,
|
||||
val knownLongQuota: Int
|
||||
)
|
||||
@@ -0,0 +1,9 @@
|
||||
package dev.inmo.saucenaoapi.models
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class Result(
|
||||
val header: ResultHeader,
|
||||
val data: ResultData
|
||||
)
|
||||
161
src/commonMain/kotlin/dev/inmo/saucenaoapi/models/ResultData.kt
Normal file
161
src/commonMain/kotlin/dev/inmo/saucenaoapi/models/ResultData.kt
Normal file
@@ -0,0 +1,161 @@
|
||||
package dev.inmo.saucenaoapi.models
|
||||
|
||||
import dev.inmo.saucenaoapi.utils.CommonMultivariantStringSerializer
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class ResultData(
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("danbooru_id")
|
||||
val danbooruId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("gelbooru_id")
|
||||
val gelbooruId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("drawr_id")
|
||||
val drawrId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("pixiv_id")
|
||||
val pixivId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("seiga_id")
|
||||
val seigaId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("yandere_id")
|
||||
val yandereId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("konachan_id")
|
||||
val konachanId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("sankaku_id")
|
||||
val sankakuId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("anime-pictures_id")
|
||||
val animePicturesId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("e621_id")
|
||||
val e621Id: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("idol_id")
|
||||
val idolId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("imdb_id")
|
||||
val imdbId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("anidb_aid")
|
||||
val anidbAId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("bcy_id")
|
||||
val bcyId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("ddb_id")
|
||||
val ddbId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("nijie_id")
|
||||
val nijieId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("getchu_id")
|
||||
val getchuId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("shutterstock_id")
|
||||
val shutterstockId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("contributor_id")
|
||||
val contributorId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("est_time")
|
||||
val estTime: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("bcy_type")
|
||||
val bcyType: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("da_id")
|
||||
val daId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("pg_id")
|
||||
val pgId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("mal_id")
|
||||
val malId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("md_id")
|
||||
val mdId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("mu_id")
|
||||
val muId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("pawoo_id")
|
||||
val pawooId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("pawoo_user_acct")
|
||||
val pawooUserAcct: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("pawoo_user_username")
|
||||
val pawooUserUsername: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("pawoo_user_display_name")
|
||||
val pawooUserDisplayname: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
val title: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("jp_title")
|
||||
val titleJp: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("eng_title")
|
||||
val titleEng: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("alt_titles")
|
||||
val titleAlt: List<String> = emptyList(),
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("jp_name")
|
||||
val nameJp: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("eng_name")
|
||||
val nameEng: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
val creator: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
val material: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("member_name")
|
||||
val memberName: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("member_id")
|
||||
val memberId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
val part: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("part_name")
|
||||
val partName: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
val date: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
val company: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
val file: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
val year: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("member_link_id")
|
||||
val memberLinkId: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("author_name")
|
||||
val authorName: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("author_url")
|
||||
val authorUrl: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
val characters: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
val source: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
val url: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
val type: String? = null,
|
||||
@Serializable(CommonMultivariantStringSerializer::class)
|
||||
@SerialName("created_at")
|
||||
val createdAt: String? = null,
|
||||
@SerialName("ext_urls")
|
||||
val extUrls: List<String> = emptyList()
|
||||
)
|
||||
@@ -0,0 +1,14 @@
|
||||
package dev.inmo.saucenaoapi.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class ResultHeader(
|
||||
val similarity: Float,
|
||||
val thumbnail: String,
|
||||
@SerialName("index_id")
|
||||
val indexId: Int,
|
||||
@SerialName("index_name")
|
||||
val indexName: String
|
||||
)
|
||||
@@ -0,0 +1,56 @@
|
||||
package dev.inmo.saucenaoapi.models
|
||||
|
||||
import dev.inmo.saucenaoapi.defaultSauceNaoParser
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.builtins.ListSerializer
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
import kotlinx.serialization.json.JsonObject
|
||||
import kotlinx.serialization.json.buildJsonObject
|
||||
|
||||
@Serializable
|
||||
private data class TemporalSauceNaoAnswerRepresentation(
|
||||
val header: Header,
|
||||
val results: List<Result> = emptyList(),
|
||||
)
|
||||
|
||||
@Serializable(SauceNaoAnswerSerializer::class)
|
||||
data class SauceNaoAnswer internal constructor(
|
||||
val header: Header,
|
||||
val results: List<Result> = emptyList(),
|
||||
val raw: JsonObject = JsonObject(emptyMap())
|
||||
)
|
||||
|
||||
@Serializer(SauceNaoAnswer::class)
|
||||
object SauceNaoAnswerSerializer : KSerializer<SauceNaoAnswer> {
|
||||
private val resultsSerializer = ListSerializer(Result.serializer())
|
||||
private const val headerField = "header"
|
||||
private const val resultsField = "results"
|
||||
private val serializer = defaultSauceNaoParser
|
||||
|
||||
override fun deserialize(decoder: Decoder): SauceNaoAnswer {
|
||||
val raw = JsonObject.serializer().deserialize(decoder)
|
||||
|
||||
return serializer.decodeFromJsonElement(
|
||||
TemporalSauceNaoAnswerRepresentation.serializer(),
|
||||
raw
|
||||
).let {
|
||||
SauceNaoAnswer(
|
||||
it.header,
|
||||
it.results,
|
||||
raw
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, value: SauceNaoAnswer) {
|
||||
val resultObject = buildJsonObject {
|
||||
value.raw.forEach {
|
||||
put(it.key, it.value)
|
||||
}
|
||||
put(headerField, serializer.encodeToJsonElement(Header.serializer(), value.header))
|
||||
put(resultsField, serializer.encodeToJsonElement(resultsSerializer, value.results))
|
||||
}
|
||||
JsonObject.serializer().serialize(encoder, resultObject)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user