mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2025-09-05 08:09:21 +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)
|
@Serializable(Gift.Companion::class)
|
||||||
sealed interface Gift {
|
sealed interface Gift {
|
||||||
val id: GiftId
|
@Serializable(Regular.Companion::class)
|
||||||
val sticker: Sticker
|
sealed interface Regular : Gift {
|
||||||
val starCount: Int
|
val id: GiftId
|
||||||
val totalCount: Int?
|
val sticker: Sticker
|
||||||
val upgradeStarCount: Int?
|
val starCount: Int
|
||||||
val remainingCount: Int?
|
val totalCount: Int?
|
||||||
|
val upgradeStarCount: Int?
|
||||||
|
val remainingCount: Int?
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class Unlimited(
|
data class Unlimited(
|
||||||
@SerialName(idField)
|
@SerialName(idField)
|
||||||
override val id: GiftId,
|
override val id: GiftId,
|
||||||
@SerialName(stickerField)
|
@SerialName(stickerField)
|
||||||
override val sticker: Sticker,
|
override val sticker: Sticker,
|
||||||
@SerialName(starCountField)
|
@SerialName(starCountField)
|
||||||
override val starCount: Int,
|
override val starCount: Int,
|
||||||
@SerialName(upgradeStarCountField)
|
@SerialName(upgradeStarCountField)
|
||||||
override val upgradeStarCount: Int? = null
|
override val upgradeStarCount: Int? = null
|
||||||
) : Gift {
|
) : Regular {
|
||||||
override val totalCount: Int?
|
override val totalCount: Int?
|
||||||
get() = null
|
get() = null
|
||||||
override val remainingCount: Int?
|
override val remainingCount: Int?
|
||||||
get() = null
|
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
|
@Serializable
|
||||||
data class Limited(
|
data class Unique(
|
||||||
@SerialName(idField)
|
@SerialName(baseNameField)
|
||||||
override val id: GiftId,
|
val baseName: String,
|
||||||
@SerialName(stickerField)
|
@SerialName(nameField)
|
||||||
override val sticker: Sticker,
|
val name: String,
|
||||||
@SerialName(starCountField)
|
@SerialName(numberField)
|
||||||
override val starCount: Int,
|
val number: Int,
|
||||||
@SerialName(totalCountField)
|
@SerialName(modelField)
|
||||||
override val totalCount: Int,
|
val model: UniqueGiftModel,
|
||||||
@SerialName(remainingCountField)
|
@SerialName(symbolField)
|
||||||
override val remainingCount: Int,
|
val symbol: UniqueGiftSymbol,
|
||||||
@SerialName(upgradeStarCountField)
|
@SerialName(backdropField)
|
||||||
override val upgradeStarCount: Int? = null,
|
val backdrop: UniqueGiftBackdrop
|
||||||
) : Gift
|
) : Gift
|
||||||
|
|
||||||
companion object : KSerializer<Gift> {
|
companion object : KSerializer<Gift> {
|
||||||
@Serializable
|
@Serializable
|
||||||
private data class GiftSurrogate(
|
@Suppress("unused", "propertyName")
|
||||||
val id: GiftId,
|
private class GiftSurrogate(
|
||||||
val sticker: Sticker,
|
// regular gift fields
|
||||||
val star_count: Int,
|
val id: GiftId?,
|
||||||
|
val sticker: Sticker?,
|
||||||
|
val star_count: Int?,
|
||||||
val total_count: Int? = null,
|
val total_count: Int? = null,
|
||||||
val remaining_count: Int? = null,
|
val remaining_count: Int? = null,
|
||||||
val upgrade_star_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
|
override val descriptor: SerialDescriptor
|
||||||
@@ -68,33 +146,37 @@ sealed interface Gift {
|
|||||||
override fun deserialize(decoder: Decoder): Gift {
|
override fun deserialize(decoder: Decoder): Gift {
|
||||||
val surrogate = GiftSurrogate.serializer().deserialize(decoder)
|
val surrogate = GiftSurrogate.serializer().deserialize(decoder)
|
||||||
|
|
||||||
return if (surrogate.total_count != null && surrogate.remaining_count != null) {
|
return if (surrogate.base_name != null && surrogate.name != null && surrogate.number != null && surrogate.model != null && surrogate.symbol != null && surrogate.backdrop != null) {
|
||||||
Limited(
|
Unique(
|
||||||
id = surrogate.id,
|
baseName = surrogate.base_name,
|
||||||
sticker = surrogate.sticker,
|
name = surrogate.name,
|
||||||
starCount = surrogate.star_count,
|
number = surrogate.number,
|
||||||
totalCount = surrogate.total_count,
|
model = surrogate.model,
|
||||||
remainingCount = surrogate.remaining_count,
|
symbol = surrogate.symbol,
|
||||||
upgradeStarCount = surrogate.upgrade_star_count,
|
backdrop = surrogate.backdrop,
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
Unlimited(
|
decoder.decodeSerializableValue(Regular.serializer())
|
||||||
id = surrogate.id,
|
|
||||||
sticker = surrogate.sticker,
|
|
||||||
starCount = surrogate.star_count,
|
|
||||||
upgradeStarCount = surrogate.upgrade_star_count,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun serialize(encoder: Encoder, value: Gift) {
|
override fun serialize(
|
||||||
|
encoder: Encoder,
|
||||||
|
value: Gift
|
||||||
|
) {
|
||||||
val surrogate = GiftSurrogate(
|
val surrogate = GiftSurrogate(
|
||||||
id = value.id,
|
id = (value as? Regular)?.id,
|
||||||
sticker = value.sticker,
|
sticker = (value as? Regular)?.sticker,
|
||||||
star_count = value.starCount,
|
star_count = (value as? Regular)?.starCount,
|
||||||
total_count = value.totalCount,
|
total_count = (value as? Regular.Limited)?.totalCount,
|
||||||
remaining_count = value.remainingCount,
|
remaining_count = (value as? Regular.Limited)?.remainingCount,
|
||||||
upgrade_star_count = value.upgradeStarCount
|
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)
|
GiftSurrogate.serializer().serialize(encoder, surrogate)
|
||||||
}
|
}
|
||||||
|
@@ -12,11 +12,12 @@ import kotlin.jvm.JvmName
|
|||||||
@Serializable
|
@Serializable
|
||||||
sealed interface GiftInfo {
|
sealed interface GiftInfo {
|
||||||
val ownedGiftId: GiftId?
|
val ownedGiftId: GiftId?
|
||||||
|
val gift: Gift
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class Regular(
|
data class Regular(
|
||||||
@SerialName(giftField)
|
@SerialName(giftField)
|
||||||
val gift: Gift,
|
override val gift: Gift.Regular,
|
||||||
@SerialName(ownedGiftIdField)
|
@SerialName(ownedGiftIdField)
|
||||||
override val ownedGiftId: GiftId? = null,
|
override val ownedGiftId: GiftId? = null,
|
||||||
@SerialName(convertStarCountField)
|
@SerialName(convertStarCountField)
|
||||||
@@ -35,7 +36,7 @@ sealed interface GiftInfo {
|
|||||||
companion object {
|
companion object {
|
||||||
@JvmName("PublicConstructor")
|
@JvmName("PublicConstructor")
|
||||||
operator fun invoke(
|
operator fun invoke(
|
||||||
gift: Gift,
|
gift: Gift.Regular,
|
||||||
ownedGiftId: GiftId? = null,
|
ownedGiftId: GiftId? = null,
|
||||||
convertStarCount: Int? = null,
|
convertStarCount: Int? = null,
|
||||||
prepaidUpgradeStarCount: Int? = null,
|
prepaidUpgradeStarCount: Int? = null,
|
||||||
@@ -60,7 +61,7 @@ sealed interface GiftInfo {
|
|||||||
@Serializable
|
@Serializable
|
||||||
data class Unique(
|
data class Unique(
|
||||||
@SerialName(giftField)
|
@SerialName(giftField)
|
||||||
val gift: UniqueGift,
|
override val gift: Gift.Unique,
|
||||||
@SerialName(originField)
|
@SerialName(originField)
|
||||||
val origin: String? = null,
|
val origin: String? = null,
|
||||||
@SerialName(ownedGiftIdField)
|
@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