1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2024-09-19 17:16:08 +00:00

update PaidMedia

This commit is contained in:
InsanusMokrassar 2024-07-06 21:45:15 +06:00
parent e02f74d77d
commit 0d4452d0f5

View File

@ -2,6 +2,7 @@ package dev.inmo.tgbotapi.types.payments.stars
import dev.inmo.tgbotapi.types.* import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.files.PhotoSize import dev.inmo.tgbotapi.types.files.PhotoSize
import dev.inmo.tgbotapi.utils.decodeDataAndJson
import kotlinx.serialization.EncodeDefault import kotlinx.serialization.EncodeDefault
import kotlinx.serialization.KSerializer import kotlinx.serialization.KSerializer
import kotlinx.serialization.SerialName import kotlinx.serialization.SerialName
@ -9,7 +10,9 @@ import kotlinx.serialization.Serializable
import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.json.JsonElement
@Serializable(PaidMedia.Companion::class)
sealed interface PaidMedia { sealed interface PaidMedia {
val type: String val type: String
@ -59,19 +62,12 @@ sealed interface PaidMedia {
} }
} }
@Serializable @Serializable(PaidMedia.Companion::class)
data class Video( data class Unknown(
@SerialName(videoField)
val video: Video
) : PaidMedia {
@EncodeDefault
@SerialName(typeField) @SerialName(typeField)
override val type: String = Companion.type override val type: String,
val raw: JsonElement?
companion object { ) : PaidMedia
val type: String = "video"
}
}
companion object : KSerializer<PaidMedia> { companion object : KSerializer<PaidMedia> {
@Serializable @Serializable
@ -91,14 +87,43 @@ sealed interface PaidMedia {
) )
override val descriptor: SerialDescriptor override val descriptor: SerialDescriptor
get() = TODO("Not yet implemented") get() = Surrogate.serializer().descriptor
override fun deserialize(decoder: Decoder): PaidMedia { override fun deserialize(decoder: Decoder): PaidMedia {
TODO("Not yet implemented") val (data, json) = decoder.decodeDataAndJson(Surrogate.serializer())
val unknown by lazy {
Unknown(data.type, json)
}
return when (data.type) {
Preview.type -> Preview(
data.width,
data.height,
data.duration
)
Photo.type -> Photo(
data.photo ?: return unknown
)
Video.type -> Video(
data.video ?: return unknown
)
else -> unknown
}
} }
override fun serialize(encoder: Encoder, value: PaidMedia) { override fun serialize(encoder: Encoder, value: PaidMedia) {
TODO("Not yet implemented") if (value is Unknown && value.raw != null) {
JsonElement.serializer().serialize(encoder, value.raw)
} else {
val surrogate = Surrogate(
value.type,
(value as? Preview) ?.width,
(value as? Preview) ?.height,
(value as? Preview) ?.duration,
(value as? Photo) ?.photo,
(value as? Video) ?.video,
)
Surrogate.serializer().serialize(encoder, surrogate)
}
} }
} }