From 90cb96a08ab9a46b4f32a9043617e375b0554248 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Thu, 21 Mar 2019 14:24:26 +0800 Subject: [PATCH] add CommonMultivariantStringSerializer --- .../SauceNaoAPI/models/ResultData.kt | 19 +++++++++++++++---- .../CommonMultivariantStringSerializer.kt | 19 +++++++++++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 src/main/kotlin/com/github/insanusmokrassar/SauceNaoAPI/utils/CommonMultivariantStringSerializer.kt diff --git a/src/main/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/ResultData.kt b/src/main/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/ResultData.kt index a5abb07..6ba44ca 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/ResultData.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/ResultData.kt @@ -1,38 +1,49 @@ package com.github.insanusmokrassar.SauceNaoAPI.models -import kotlinx.serialization.Optional -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable +import com.github.insanusmokrassar.SauceNaoAPI.utils.CommonMultivariantStringSerializer +import kotlinx.serialization.* +import kotlinx.serialization.internal.ArrayListSerializer +import kotlinx.serialization.internal.StringSerializer @Serializable data class ResultData( + @Serializable(CommonMultivariantStringSerializer::class) @SerialName("danbooru_id") @Optional val danbooruId: String? = null, + @Serializable(CommonMultivariantStringSerializer::class) @SerialName("gelbooru_id") @Optional val gelbooruId: String? = null, + @Serializable(CommonMultivariantStringSerializer::class) @SerialName("drawr_id") @Optional val drawrId: String? = null, + @Serializable(CommonMultivariantStringSerializer::class) @SerialName("pixiv_id") @Optional val pixivId: String? = null, + @Serializable(CommonMultivariantStringSerializer::class) @Optional val title: String? = null, + @Serializable(CommonMultivariantStringSerializer::class) @Optional val creator: String? = null, + @Serializable(CommonMultivariantStringSerializer::class) @Optional val material: String? = null, + @Serializable(CommonMultivariantStringSerializer::class) @SerialName("member_name") @Optional val memberName: String? = null, + @Serializable(CommonMultivariantStringSerializer::class) @SerialName("member_id") @Optional val memberId: String? = null, + @Serializable(CommonMultivariantStringSerializer::class) @Optional val characters: String? = null, @SerialName("ext_urls") @Optional val extUrls: List = emptyList() -) \ No newline at end of file +) diff --git a/src/main/kotlin/com/github/insanusmokrassar/SauceNaoAPI/utils/CommonMultivariantStringSerializer.kt b/src/main/kotlin/com/github/insanusmokrassar/SauceNaoAPI/utils/CommonMultivariantStringSerializer.kt new file mode 100644 index 0000000..0176fc8 --- /dev/null +++ b/src/main/kotlin/com/github/insanusmokrassar/SauceNaoAPI/utils/CommonMultivariantStringSerializer.kt @@ -0,0 +1,19 @@ +package com.github.insanusmokrassar.SauceNaoAPI.utils + +import kotlinx.serialization.* +import kotlinx.serialization.internal.ArrayListSerializer +import kotlinx.serialization.internal.StringSerializer + + +@Serializer(String::class) +object CommonMultivariantStringSerializer : KSerializer by StringSerializer { + private val stringArraySerializer = ArrayListSerializer(StringSerializer) + + override fun deserialize(decoder: Decoder): String { + return try { + decoder.decodeSerializableValue(StringSerializer) + } catch (e: Exception) { + decoder.decodeSerializableValue(stringArraySerializer).joinToString() + } + } +}