mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2026-03-03 17:32:23 +00:00
add OwnedGifts sealed interface
This commit is contained in:
@@ -16,10 +16,12 @@ import dev.inmo.tgbotapi.types.sortByPriceField
|
||||
import dev.inmo.tgbotapi.types.offsetField
|
||||
import dev.inmo.tgbotapi.types.limitField
|
||||
import dev.inmo.tgbotapi.types.gifts.GiftSentOrReceivedEvent
|
||||
import dev.inmo.tgbotapi.types.gifts.OwnedGift
|
||||
import kotlinx.serialization.DeserializationStrategy
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.SerializationStrategy
|
||||
import kotlinx.serialization.builtins.serializer
|
||||
|
||||
@Serializable
|
||||
data class GetBusinessAccountGifts(
|
||||
@@ -45,16 +47,16 @@ data class GetBusinessAccountGifts(
|
||||
val offset: String? = null,
|
||||
@SerialName(limitField)
|
||||
val limit: Int? = null,
|
||||
) : BusinessRequest.Simple<OwnedGifts<GiftSentOrReceivedEvent.ReceivedInBusinessAccount>> {
|
||||
) : BusinessRequest.Simple<OwnedGifts<OwnedGift.OwnedByBusinessAccount>> {
|
||||
override fun method(): String = "getBusinessAccountGifts"
|
||||
|
||||
override val resultDeserializer: DeserializationStrategy<OwnedGifts<GiftSentOrReceivedEvent.ReceivedInBusinessAccount>>
|
||||
override val resultDeserializer: DeserializationStrategy<OwnedGifts<OwnedGift.OwnedByBusinessAccount>>
|
||||
get() = Companion.resultSerializer
|
||||
override val requestSerializer: SerializationStrategy<*>
|
||||
get() = serializer()
|
||||
|
||||
companion object {
|
||||
@Warning("This API can be changed without any warranties of backward compatibility")
|
||||
val resultSerializer = OwnedGifts.serializer(GiftSentOrReceivedEvent.ReceivedInBusinessAccount.serializer())
|
||||
val resultSerializer = OwnedGifts.serializer(OwnedGift.OwnedByBusinessAccount.serializer())
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@ import dev.inmo.tgbotapi.types.excludeFromBlockchainField
|
||||
import dev.inmo.tgbotapi.types.excludeUniqueField
|
||||
import dev.inmo.tgbotapi.types.sortByPriceField
|
||||
import dev.inmo.tgbotapi.types.gifts.GiftSentOrReceivedEvent
|
||||
import dev.inmo.tgbotapi.types.gifts.OwnedGift
|
||||
import dev.inmo.tgbotapi.types.limitField
|
||||
import dev.inmo.tgbotapi.types.offsetField
|
||||
import kotlinx.serialization.DeserializationStrategy
|
||||
@@ -46,16 +47,16 @@ data class GetChatGifts(
|
||||
val offset: String? = null,
|
||||
@SerialName(limitField)
|
||||
val limit: Int? = null,
|
||||
) : SimpleRequest<OwnedGifts<GiftSentOrReceivedEvent>>, ChatRequest {
|
||||
) : SimpleRequest<OwnedGifts<OwnedGift.Common>>, ChatRequest {
|
||||
override fun method(): String = "getChatGifts"
|
||||
|
||||
override val resultDeserializer: DeserializationStrategy<OwnedGifts<GiftSentOrReceivedEvent>>
|
||||
override val resultDeserializer: DeserializationStrategy<OwnedGifts<OwnedGift.Common>>
|
||||
get() = Companion.resultSerializer
|
||||
override val requestSerializer: SerializationStrategy<*>
|
||||
get() = serializer()
|
||||
|
||||
companion object {
|
||||
@Warning("This API can be changed without any warranties of backward compatibility")
|
||||
val resultSerializer = OwnedGifts.serializer(GiftSentOrReceivedEvent.serializer())
|
||||
val resultSerializer = OwnedGifts.serializer(OwnedGift.Common.serializer())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import dev.inmo.tgbotapi.types.excludeFromBlockchainField
|
||||
import dev.inmo.tgbotapi.types.excludeUniqueField
|
||||
import dev.inmo.tgbotapi.types.sortByPriceField
|
||||
import dev.inmo.tgbotapi.types.gifts.GiftSentOrReceivedEvent
|
||||
import dev.inmo.tgbotapi.types.gifts.OwnedGift
|
||||
import dev.inmo.tgbotapi.types.limitField
|
||||
import dev.inmo.tgbotapi.types.offsetField
|
||||
import dev.inmo.tgbotapi.types.userIdField
|
||||
@@ -40,16 +41,16 @@ data class GetUserGifts(
|
||||
val offset: String? = null,
|
||||
@SerialName(limitField)
|
||||
val limit: Int? = null,
|
||||
) : SimpleRequest<OwnedGifts<GiftSentOrReceivedEvent>> {
|
||||
) : SimpleRequest<OwnedGifts<OwnedGift.Common>> {
|
||||
override fun method(): String = "getUserGifts"
|
||||
|
||||
override val resultDeserializer: DeserializationStrategy<OwnedGifts<GiftSentOrReceivedEvent>>
|
||||
override val resultDeserializer: DeserializationStrategy<OwnedGifts<OwnedGift.Common>>
|
||||
get() = Companion.resultSerializer
|
||||
override val requestSerializer: SerializationStrategy<*>
|
||||
get() = serializer()
|
||||
|
||||
companion object {
|
||||
@Warning("This API can be changed without any warranties of backward compatibility")
|
||||
val resultSerializer = OwnedGifts.serializer(GiftSentOrReceivedEvent.serializer())
|
||||
val resultSerializer = OwnedGifts.serializer(OwnedGift.Common.serializer())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -759,7 +759,9 @@ const val personalRemainingCountField = "personal_remaining_count"
|
||||
const val hasColorsField = "has_colors"
|
||||
const val uniqueGiftVariantCountField = "unique_gift_variant_count"
|
||||
const val uniqueGiftNumberField = "unique_gift_number"
|
||||
const val isSavedField = "is_saved"
|
||||
const val isUpgradeSeparateField = "is_upgrade_separate"
|
||||
const val canBeTransferredField = "can_be_transferred"
|
||||
const val isFromBlockchainField = "is_from_blockchain"
|
||||
|
||||
const val centerColorField = "center_color"
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package dev.inmo.tgbotapi.types
|
||||
|
||||
import dev.inmo.tgbotapi.types.gifts.GiftSentOrReceivedEvent
|
||||
import dev.inmo.tgbotapi.types.gifts.OwnedGift
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class OwnedGifts<GiftType: GiftSentOrReceivedEvent>(
|
||||
data class OwnedGifts<GiftType: OwnedGift>(
|
||||
@SerialName(totalCountField)
|
||||
val totalCount: Int,
|
||||
@SerialName(giftsField)
|
||||
|
||||
@@ -0,0 +1,348 @@
|
||||
package dev.inmo.tgbotapi.types.gifts
|
||||
|
||||
import dev.inmo.tgbotapi.abstracts.TextedInput
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewUser
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.CommonEvent
|
||||
import dev.inmo.tgbotapi.types.message.RawMessageEntities
|
||||
import dev.inmo.tgbotapi.types.message.asTextSources
|
||||
import dev.inmo.tgbotapi.types.message.textsources.TextSource
|
||||
import dev.inmo.tgbotapi.types.message.textsources.TextSourcesList
|
||||
import dev.inmo.tgbotapi.types.message.toRawMessageEntities
|
||||
import dev.inmo.tgbotapi.types.payments.abstracts.Currency
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.Transient
|
||||
import kotlinx.serialization.builtins.serializer
|
||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
import kotlinx.serialization.json.JsonDecoder
|
||||
import kotlinx.serialization.json.JsonElement
|
||||
import kotlinx.serialization.json.jsonObject
|
||||
import kotlinx.serialization.json.jsonPrimitive
|
||||
import kotlin.jvm.JvmInline
|
||||
import kotlin.jvm.JvmName
|
||||
|
||||
@Serializable(OwnedGift.Companion::class)
|
||||
sealed interface OwnedGift {
|
||||
val gift: Gift
|
||||
val sendDate: TelegramDate
|
||||
val ownedGiftId: GiftId?
|
||||
val senderUser: PreviewUser?
|
||||
val isSaved: Boolean
|
||||
|
||||
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
|
||||
@Serializable(OwnedGift.Companion::class)
|
||||
sealed interface OwnedByBusinessAccount : OwnedGift {
|
||||
override val ownedGiftId: GiftId
|
||||
}
|
||||
|
||||
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
|
||||
@Serializable(OwnedGift.Companion::class)
|
||||
sealed interface Common : OwnedGift {
|
||||
override val ownedGiftId: GiftId?
|
||||
get() = null
|
||||
}
|
||||
|
||||
@Serializable(Regular.Companion::class)
|
||||
sealed interface Regular : OwnedGift, TextedInput {
|
||||
override val gift: Gift.Regular
|
||||
val isPrivate: Boolean
|
||||
val canBeUpgraded: Boolean
|
||||
val wasRefunded: Boolean
|
||||
val convertStarCount: Int?
|
||||
val prepaidUpgradeStarCount: Int?
|
||||
val isUpgradeSeparate: Boolean
|
||||
val uniqueGiftNumber: Int?
|
||||
|
||||
@Serializable
|
||||
data class Common(
|
||||
@SerialName(giftField)
|
||||
override val gift: Gift.Regular,
|
||||
@SerialName(sendDateField)
|
||||
override val sendDate: TelegramDate,
|
||||
@SerialName(senderUserField)
|
||||
override val senderUser: PreviewUser? = null,
|
||||
@SerialName(textField)
|
||||
override val text: String? = null,
|
||||
@SerialName(entitiesField)
|
||||
private val entities: RawMessageEntities? = null,
|
||||
@SerialName(isPrivateField)
|
||||
override val isPrivate: Boolean = false,
|
||||
@SerialName(isSavedField)
|
||||
override val isSaved: Boolean = false,
|
||||
@SerialName(canBeUpgradedField)
|
||||
override val canBeUpgraded: Boolean = false,
|
||||
@SerialName(wasRefundedField)
|
||||
override val wasRefunded: Boolean = false,
|
||||
@SerialName(convertStarCountField)
|
||||
override val convertStarCount: Int? = null,
|
||||
@SerialName(prepaidUpgradeStarCountField)
|
||||
override val prepaidUpgradeStarCount: Int? = null,
|
||||
@SerialName(isUpgradeSeparateField)
|
||||
override val isUpgradeSeparate: Boolean = false,
|
||||
@SerialName(uniqueGiftNumberField)
|
||||
override val uniqueGiftNumber: Int? = null
|
||||
) : Regular, OwnedGift.Common {
|
||||
override val textSources: List<TextSource> by lazy {
|
||||
entities ?.asTextSources(text ?: return@lazy emptyList()) ?: emptyList()
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class OwnedByBusinessAccount(
|
||||
@SerialName(giftField)
|
||||
override val gift: Gift.Regular,
|
||||
@SerialName(sendDateField)
|
||||
override val sendDate: TelegramDate,
|
||||
@SerialName(ownedGiftIdField)
|
||||
override val ownedGiftId: GiftId,
|
||||
@SerialName(senderUserField)
|
||||
override val senderUser: PreviewUser? = null,
|
||||
@SerialName(textField)
|
||||
override val text: String? = null,
|
||||
@SerialName(entitiesField)
|
||||
private val entities: RawMessageEntities? = null,
|
||||
@SerialName(isPrivateField)
|
||||
override val isPrivate: Boolean = false,
|
||||
@SerialName(isSavedField)
|
||||
override val isSaved: Boolean = false,
|
||||
@SerialName(canBeUpgradedField)
|
||||
override val canBeUpgraded: Boolean = false,
|
||||
@SerialName(wasRefundedField)
|
||||
override val wasRefunded: Boolean = false,
|
||||
@SerialName(convertStarCountField)
|
||||
override val convertStarCount: Int? = null,
|
||||
@SerialName(prepaidUpgradeStarCountField)
|
||||
override val prepaidUpgradeStarCount: Int? = null,
|
||||
@SerialName(isUpgradeSeparateField)
|
||||
override val isUpgradeSeparate: Boolean = false,
|
||||
@SerialName(uniqueGiftNumberField)
|
||||
override val uniqueGiftNumber: Int? = null
|
||||
) : Regular, OwnedGift.OwnedByBusinessAccount {
|
||||
override val textSources: List<TextSource> by lazy {
|
||||
entities ?.asTextSources(text ?: return@lazy emptyList()) ?: emptyList()
|
||||
}
|
||||
}
|
||||
|
||||
companion object : KSerializer<OwnedGift.Regular> {
|
||||
@Serializable
|
||||
private data class Surrogate(
|
||||
@SerialName(giftField)
|
||||
val gift: Gift.Regular,
|
||||
@SerialName(ownedGiftIdField)
|
||||
val ownedGiftId: GiftId? = null,
|
||||
@SerialName(senderUserField)
|
||||
val senderUser: PreviewUser? = null,
|
||||
@SerialName(sendDateField)
|
||||
val sendDate: TelegramDate,
|
||||
@SerialName(textField)
|
||||
val text: String? = null,
|
||||
@SerialName(entitiesField)
|
||||
val entities: RawMessageEntities? = null,
|
||||
@SerialName(isPrivateField)
|
||||
val isPrivate: Boolean = false,
|
||||
@SerialName(isSavedField)
|
||||
val isSaved: Boolean = false,
|
||||
@SerialName(canBeUpgradedField)
|
||||
val canBeUpgraded: Boolean = false,
|
||||
@SerialName(wasRefundedField)
|
||||
val wasRefunded: Boolean = false,
|
||||
@SerialName(convertStarCountField)
|
||||
val convertStarCount: Int? = null,
|
||||
@SerialName(prepaidUpgradeStarCountField)
|
||||
val prepaidUpgradeStarCount: Int? = null,
|
||||
@SerialName(isUpgradeSeparateField)
|
||||
val isUpgradeSeparate: Boolean = false,
|
||||
@SerialName(uniqueGiftNumberField)
|
||||
val uniqueGiftNumber: Int? = null
|
||||
)
|
||||
|
||||
override val descriptor: SerialDescriptor
|
||||
get() = Surrogate.serializer().descriptor
|
||||
|
||||
override fun serialize(encoder: Encoder, value: Regular) {
|
||||
when (value) {
|
||||
is Common -> Common.serializer().serialize(encoder, value)
|
||||
is OwnedByBusinessAccount -> OwnedByBusinessAccount.serializer().serialize(encoder, value)
|
||||
}
|
||||
}
|
||||
|
||||
override fun deserialize(decoder: Decoder): Regular {
|
||||
val surrogate = Surrogate.serializer().deserialize(decoder)
|
||||
|
||||
return when {
|
||||
surrogate.ownedGiftId == null -> {
|
||||
Common(
|
||||
gift = surrogate.gift,
|
||||
sendDate = surrogate.sendDate,
|
||||
senderUser = surrogate.senderUser,
|
||||
text = surrogate.text,
|
||||
entities = surrogate.entities,
|
||||
isPrivate = surrogate.isPrivate,
|
||||
isSaved = surrogate.isSaved,
|
||||
canBeUpgraded = surrogate.canBeUpgraded,
|
||||
wasRefunded = surrogate.wasRefunded,
|
||||
convertStarCount = surrogate.convertStarCount,
|
||||
prepaidUpgradeStarCount = surrogate.prepaidUpgradeStarCount,
|
||||
isUpgradeSeparate = surrogate.isUpgradeSeparate,
|
||||
uniqueGiftNumber = surrogate.uniqueGiftNumber
|
||||
)
|
||||
}
|
||||
else -> {
|
||||
OwnedByBusinessAccount(
|
||||
gift = surrogate.gift,
|
||||
sendDate = surrogate.sendDate,
|
||||
ownedGiftId = surrogate.ownedGiftId,
|
||||
senderUser = surrogate.senderUser,
|
||||
text = surrogate.text,
|
||||
entities = surrogate.entities,
|
||||
isPrivate = surrogate.isPrivate,
|
||||
isSaved = surrogate.isSaved,
|
||||
canBeUpgraded = surrogate.canBeUpgraded,
|
||||
wasRefunded = surrogate.wasRefunded,
|
||||
convertStarCount = surrogate.convertStarCount,
|
||||
prepaidUpgradeStarCount = surrogate.prepaidUpgradeStarCount,
|
||||
isUpgradeSeparate = surrogate.isUpgradeSeparate,
|
||||
uniqueGiftNumber = surrogate.uniqueGiftNumber
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable(Unique.Companion::class)
|
||||
sealed interface Unique : OwnedGift {
|
||||
override val gift: Gift.Unique
|
||||
val canBeTransferred: Boolean
|
||||
val transferStarCount: Int?
|
||||
val nextTransferDate: TelegramDate?
|
||||
|
||||
@Serializable
|
||||
data class Common(
|
||||
@SerialName(giftField)
|
||||
override val gift: Gift.Unique,
|
||||
@SerialName(sendDateField)
|
||||
override val sendDate: TelegramDate,
|
||||
@SerialName(senderUserField)
|
||||
override val senderUser: PreviewUser? = null,
|
||||
@SerialName(isSavedField)
|
||||
override val isSaved: Boolean = false,
|
||||
@SerialName(canBeTransferredField)
|
||||
override val canBeTransferred: Boolean = false,
|
||||
@SerialName(transferStarCountField)
|
||||
override val transferStarCount: Int? = null,
|
||||
@SerialName(nextTransferDateField)
|
||||
override val nextTransferDate: TelegramDate? = null
|
||||
) : Unique, OwnedGift.Common
|
||||
|
||||
@Serializable
|
||||
data class OwnedByBusinessAccount(
|
||||
@SerialName(giftField)
|
||||
override val gift: Gift.Unique,
|
||||
@SerialName(sendDateField)
|
||||
override val sendDate: TelegramDate,
|
||||
@SerialName(ownedGiftIdField)
|
||||
override val ownedGiftId: GiftId,
|
||||
@SerialName(senderUserField)
|
||||
override val senderUser: PreviewUser? = null,
|
||||
@SerialName(isSavedField)
|
||||
override val isSaved: Boolean = false,
|
||||
@SerialName(canBeTransferredField)
|
||||
override val canBeTransferred: Boolean = false,
|
||||
@SerialName(transferStarCountField)
|
||||
override val transferStarCount: Int? = null,
|
||||
@SerialName(nextTransferDateField)
|
||||
override val nextTransferDate: TelegramDate? = null
|
||||
) : Unique, OwnedGift.OwnedByBusinessAccount
|
||||
|
||||
companion object : KSerializer<OwnedGift.Unique> {
|
||||
@Serializable
|
||||
private data class Surrogate(
|
||||
@SerialName(giftField)
|
||||
val gift: Gift.Unique,
|
||||
@SerialName(ownedGiftIdField)
|
||||
val ownedGiftId: GiftId? = null,
|
||||
@SerialName(senderUserField)
|
||||
val senderUser: PreviewUser? = null,
|
||||
@SerialName(sendDateField)
|
||||
val sendDate: TelegramDate,
|
||||
@SerialName(isSavedField)
|
||||
val isSaved: Boolean = false,
|
||||
@SerialName(canBeTransferredField)
|
||||
val canBeTransferred: Boolean = false,
|
||||
@SerialName(transferStarCountField)
|
||||
val transferStarCount: Int? = null,
|
||||
@SerialName(nextTransferDateField)
|
||||
val nextTransferDate: TelegramDate? = null
|
||||
)
|
||||
|
||||
override val descriptor: SerialDescriptor
|
||||
get() = Surrogate.serializer().descriptor
|
||||
|
||||
override fun serialize(encoder: Encoder, value: Unique) {
|
||||
when (value) {
|
||||
is Common -> Common.serializer().serialize(encoder, value)
|
||||
is OwnedByBusinessAccount -> OwnedByBusinessAccount.serializer().serialize(encoder, value)
|
||||
}
|
||||
}
|
||||
|
||||
override fun deserialize(decoder: Decoder): Unique {
|
||||
val surrogate = Surrogate.serializer().deserialize(decoder)
|
||||
|
||||
return when {
|
||||
surrogate.ownedGiftId == null -> {
|
||||
Common(
|
||||
gift = surrogate.gift,
|
||||
sendDate = surrogate.sendDate,
|
||||
senderUser = surrogate.senderUser,
|
||||
isSaved = surrogate.isSaved,
|
||||
canBeTransferred = surrogate.canBeTransferred,
|
||||
transferStarCount = surrogate.transferStarCount,
|
||||
nextTransferDate = surrogate.nextTransferDate
|
||||
)
|
||||
}
|
||||
else -> {
|
||||
OwnedByBusinessAccount(
|
||||
gift = surrogate.gift,
|
||||
sendDate = surrogate.sendDate,
|
||||
ownedGiftId = surrogate.ownedGiftId,
|
||||
senderUser = surrogate.senderUser,
|
||||
isSaved = surrogate.isSaved,
|
||||
canBeTransferred = surrogate.canBeTransferred,
|
||||
transferStarCount = surrogate.transferStarCount,
|
||||
nextTransferDate = surrogate.nextTransferDate
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object : KSerializer<OwnedGift> {
|
||||
override val descriptor: SerialDescriptor
|
||||
get() = JsonElement.serializer().descriptor
|
||||
|
||||
override fun serialize(encoder: Encoder, value: OwnedGift) {
|
||||
when (value) {
|
||||
is Regular -> Regular.serialize(encoder, value)
|
||||
is Unique -> Unique.serialize(encoder, value)
|
||||
}
|
||||
}
|
||||
|
||||
override fun deserialize(decoder: Decoder): OwnedGift {
|
||||
val json = (decoder as JsonDecoder)
|
||||
val element = json.decodeJsonElement()
|
||||
val type = element.jsonObject[typeField] ?.jsonPrimitive ?.content
|
||||
|
||||
return when (type) {
|
||||
"regular" -> json.json.decodeFromJsonElement(Regular, element)
|
||||
"unique" -> json.json.decodeFromJsonElement(Unique, element)
|
||||
else -> error("Unknown OwnedGift type: $type")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user