mirror of
				https://github.com/InsanusMokrassar/TelegramBotAPI.git
				synced 2025-11-04 06:00:15 +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