add CommonMultivariantStringSerializer

This commit is contained in:
InsanusMokrassar 2019-03-21 14:24:26 +08:00
parent 6dd9638059
commit 90cb96a08a
2 changed files with 34 additions and 4 deletions

View File

@ -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<String> = emptyList()
)
)

View File

@ -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<String> 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()
}
}
}