mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2025-09-03 23:29:33 +00:00
refactor: merged UniqueGift and regular Gift types into one interface
This commit is contained in:
@@ -11,55 +11,133 @@ import kotlinx.serialization.encoding.Encoder
|
||||
|
||||
@Serializable(Gift.Companion::class)
|
||||
sealed interface Gift {
|
||||
val id: GiftId
|
||||
val sticker: Sticker
|
||||
val starCount: Int
|
||||
val totalCount: Int?
|
||||
val upgradeStarCount: Int?
|
||||
val remainingCount: Int?
|
||||
@Serializable(Regular.Companion::class)
|
||||
sealed interface Regular : Gift {
|
||||
val id: GiftId
|
||||
val sticker: Sticker
|
||||
val starCount: Int
|
||||
val totalCount: Int?
|
||||
val upgradeStarCount: Int?
|
||||
val remainingCount: Int?
|
||||
|
||||
@Serializable
|
||||
data class Unlimited(
|
||||
@SerialName(idField)
|
||||
override val id: GiftId,
|
||||
@SerialName(stickerField)
|
||||
override val sticker: Sticker,
|
||||
@SerialName(starCountField)
|
||||
override val starCount: Int,
|
||||
@SerialName(upgradeStarCountField)
|
||||
override val upgradeStarCount: Int? = null
|
||||
) : Gift {
|
||||
override val totalCount: Int?
|
||||
get() = null
|
||||
override val remainingCount: Int?
|
||||
get() = null
|
||||
@Serializable
|
||||
data class Unlimited(
|
||||
@SerialName(idField)
|
||||
override val id: GiftId,
|
||||
@SerialName(stickerField)
|
||||
override val sticker: Sticker,
|
||||
@SerialName(starCountField)
|
||||
override val starCount: Int,
|
||||
@SerialName(upgradeStarCountField)
|
||||
override val upgradeStarCount: Int? = null
|
||||
) : Regular {
|
||||
override val totalCount: Int?
|
||||
get() = null
|
||||
override val remainingCount: Int?
|
||||
get() = null
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class Limited(
|
||||
@SerialName(idField)
|
||||
override val id: GiftId,
|
||||
@SerialName(stickerField)
|
||||
override val sticker: Sticker,
|
||||
@SerialName(starCountField)
|
||||
override val starCount: Int,
|
||||
@SerialName(totalCountField)
|
||||
override val totalCount: Int,
|
||||
@SerialName(remainingCountField)
|
||||
override val remainingCount: Int,
|
||||
@SerialName(upgradeStarCountField)
|
||||
override val upgradeStarCount: Int? = null,
|
||||
) : Regular
|
||||
|
||||
companion object : KSerializer<Regular> {
|
||||
@Serializable
|
||||
@Suppress("propertyName")
|
||||
private data class RegularGiftSurrogate(
|
||||
val id: GiftId,
|
||||
val sticker: Sticker,
|
||||
val star_count: Int,
|
||||
val total_count: Int? = null,
|
||||
val remaining_count: Int? = null,
|
||||
val upgrade_star_count: Int? = null,
|
||||
)
|
||||
|
||||
override val descriptor: SerialDescriptor
|
||||
get() = RegularGiftSurrogate.serializer().descriptor
|
||||
|
||||
override fun deserialize(decoder: Decoder): Regular {
|
||||
val surrogate = RegularGiftSurrogate.serializer().deserialize(decoder)
|
||||
|
||||
return if (surrogate.total_count != null && surrogate.remaining_count != null) {
|
||||
Limited(
|
||||
id = surrogate.id,
|
||||
sticker = surrogate.sticker,
|
||||
starCount = surrogate.star_count,
|
||||
totalCount = surrogate.total_count,
|
||||
remainingCount = surrogate.remaining_count,
|
||||
upgradeStarCount = surrogate.upgrade_star_count,
|
||||
)
|
||||
} else {
|
||||
Unlimited(
|
||||
id = surrogate.id,
|
||||
sticker = surrogate.sticker,
|
||||
starCount = surrogate.star_count,
|
||||
upgradeStarCount = surrogate.upgrade_star_count,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, value: Regular) {
|
||||
val surrogate = RegularGiftSurrogate(
|
||||
id = value.id,
|
||||
sticker = value.sticker,
|
||||
star_count = value.starCount,
|
||||
total_count = value.totalCount,
|
||||
remaining_count = value.remainingCount,
|
||||
upgrade_star_count = value.upgradeStarCount
|
||||
)
|
||||
RegularGiftSurrogate.serializer().serialize(encoder, surrogate)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class Limited(
|
||||
@SerialName(idField)
|
||||
override val id: GiftId,
|
||||
@SerialName(stickerField)
|
||||
override val sticker: Sticker,
|
||||
@SerialName(starCountField)
|
||||
override val starCount: Int,
|
||||
@SerialName(totalCountField)
|
||||
override val totalCount: Int,
|
||||
@SerialName(remainingCountField)
|
||||
override val remainingCount: Int,
|
||||
@SerialName(upgradeStarCountField)
|
||||
override val upgradeStarCount: Int? = null,
|
||||
data class Unique(
|
||||
@SerialName(baseNameField)
|
||||
val baseName: String,
|
||||
@SerialName(nameField)
|
||||
val name: String,
|
||||
@SerialName(numberField)
|
||||
val number: Int,
|
||||
@SerialName(modelField)
|
||||
val model: UniqueGiftModel,
|
||||
@SerialName(symbolField)
|
||||
val symbol: UniqueGiftSymbol,
|
||||
@SerialName(backdropField)
|
||||
val backdrop: UniqueGiftBackdrop
|
||||
) : Gift
|
||||
|
||||
companion object : KSerializer<Gift> {
|
||||
@Serializable
|
||||
private data class GiftSurrogate(
|
||||
val id: GiftId,
|
||||
val sticker: Sticker,
|
||||
val star_count: Int,
|
||||
@Suppress("unused", "propertyName")
|
||||
private class GiftSurrogate(
|
||||
// regular gift fields
|
||||
val id: GiftId?,
|
||||
val sticker: Sticker?,
|
||||
val star_count: Int?,
|
||||
val total_count: Int? = null,
|
||||
val remaining_count: Int? = null,
|
||||
val upgrade_star_count: Int? = null,
|
||||
// unique gift fields
|
||||
val base_name: String? = null,
|
||||
val name: String? = null,
|
||||
val number: Int? = null,
|
||||
val model: UniqueGiftModel? = null,
|
||||
val symbol: UniqueGiftSymbol? = null,
|
||||
val backdrop: UniqueGiftBackdrop? = null,
|
||||
)
|
||||
|
||||
override val descriptor: SerialDescriptor
|
||||
@@ -68,33 +146,37 @@ sealed interface Gift {
|
||||
override fun deserialize(decoder: Decoder): Gift {
|
||||
val surrogate = GiftSurrogate.serializer().deserialize(decoder)
|
||||
|
||||
return if (surrogate.total_count != null && surrogate.remaining_count != null) {
|
||||
Limited(
|
||||
id = surrogate.id,
|
||||
sticker = surrogate.sticker,
|
||||
starCount = surrogate.star_count,
|
||||
totalCount = surrogate.total_count,
|
||||
remainingCount = surrogate.remaining_count,
|
||||
upgradeStarCount = surrogate.upgrade_star_count,
|
||||
return if (surrogate.base_name != null && surrogate.name != null && surrogate.number != null && surrogate.model != null && surrogate.symbol != null && surrogate.backdrop != null) {
|
||||
Unique(
|
||||
baseName = surrogate.base_name,
|
||||
name = surrogate.name,
|
||||
number = surrogate.number,
|
||||
model = surrogate.model,
|
||||
symbol = surrogate.symbol,
|
||||
backdrop = surrogate.backdrop,
|
||||
)
|
||||
} else {
|
||||
Unlimited(
|
||||
id = surrogate.id,
|
||||
sticker = surrogate.sticker,
|
||||
starCount = surrogate.star_count,
|
||||
upgradeStarCount = surrogate.upgrade_star_count,
|
||||
)
|
||||
decoder.decodeSerializableValue(Regular.serializer())
|
||||
}
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, value: Gift) {
|
||||
override fun serialize(
|
||||
encoder: Encoder,
|
||||
value: Gift
|
||||
) {
|
||||
val surrogate = GiftSurrogate(
|
||||
id = value.id,
|
||||
sticker = value.sticker,
|
||||
star_count = value.starCount,
|
||||
total_count = value.totalCount,
|
||||
remaining_count = value.remainingCount,
|
||||
upgrade_star_count = value.upgradeStarCount
|
||||
id = (value as? Regular)?.id,
|
||||
sticker = (value as? Regular)?.sticker,
|
||||
star_count = (value as? Regular)?.starCount,
|
||||
total_count = (value as? Regular.Limited)?.totalCount,
|
||||
remaining_count = (value as? Regular.Limited)?.remainingCount,
|
||||
upgrade_star_count = (value as? Regular)?.upgradeStarCount,
|
||||
base_name = (value as? Unique)?.baseName,
|
||||
name = (value as? Unique)?.name,
|
||||
number = (value as? Unique)?.number,
|
||||
model = (value as? Unique)?.model,
|
||||
symbol = (value as? Unique)?.symbol,
|
||||
backdrop = (value as? Unique)?.backdrop,
|
||||
)
|
||||
GiftSurrogate.serializer().serialize(encoder, surrogate)
|
||||
}
|
||||
|
@@ -12,11 +12,12 @@ import kotlin.jvm.JvmName
|
||||
@Serializable
|
||||
sealed interface GiftInfo {
|
||||
val ownedGiftId: GiftId?
|
||||
val gift: Gift
|
||||
|
||||
@Serializable
|
||||
data class Regular(
|
||||
@SerialName(giftField)
|
||||
val gift: Gift,
|
||||
override val gift: Gift.Regular,
|
||||
@SerialName(ownedGiftIdField)
|
||||
override val ownedGiftId: GiftId? = null,
|
||||
@SerialName(convertStarCountField)
|
||||
@@ -35,7 +36,7 @@ sealed interface GiftInfo {
|
||||
companion object {
|
||||
@JvmName("PublicConstructor")
|
||||
operator fun invoke(
|
||||
gift: Gift,
|
||||
gift: Gift.Regular,
|
||||
ownedGiftId: GiftId? = null,
|
||||
convertStarCount: Int? = null,
|
||||
prepaidUpgradeStarCount: Int? = null,
|
||||
@@ -60,7 +61,7 @@ sealed interface GiftInfo {
|
||||
@Serializable
|
||||
data class Unique(
|
||||
@SerialName(giftField)
|
||||
val gift: UniqueGift,
|
||||
override val gift: Gift.Unique,
|
||||
@SerialName(originField)
|
||||
val origin: String? = null,
|
||||
@SerialName(ownedGiftIdField)
|
||||
|
@@ -1,22 +0,0 @@
|
||||
package dev.inmo.tgbotapi.types.gifts
|
||||
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
|
||||
@Serializable
|
||||
data class UniqueGift(
|
||||
@SerialName(baseNameField)
|
||||
val baseName: String,
|
||||
@SerialName(nameField)
|
||||
val name: String,
|
||||
@SerialName(numberField)
|
||||
val number: Int,
|
||||
@SerialName(modelField)
|
||||
val model: UniqueGiftModel,
|
||||
@SerialName(symbolField)
|
||||
val symbol: UniqueGiftSymbol,
|
||||
@SerialName(backdropField)
|
||||
val backdrop: UniqueGiftBackdrop
|
||||
)
|
Reference in New Issue
Block a user