From 608fde41397b886fad51a863e17917b3663fafd3 Mon Sep 17 00:00:00 2001 From: bpavuk <75901693+bpavuk@users.noreply.github.com> Date: Sat, 19 Apr 2025 16:11:44 +0300 Subject: [PATCH] refactor: replace `transactionType` String with `TransactionType` enum --- .../payments/stars/TransactionPartner.kt | 4 +- .../types/payments/stars/TransactionType.kt | 38 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/payments/stars/TransactionType.kt diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/payments/stars/TransactionPartner.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/payments/stars/TransactionPartner.kt index 53efc2dff7..1034f88b16 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/payments/stars/TransactionPartner.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/payments/stars/TransactionPartner.kt @@ -49,7 +49,7 @@ sealed interface TransactionPartner { @SerialName(userField) val user: PreviewUser, @SerialName(transactionTypeField) - val transactionType: String, + val transactionType: TransactionType, @SerialName(affiliateField) val affiliate: AffiliateInfo? = null, @SerialName(invoicePayloadField) @@ -156,7 +156,7 @@ sealed interface TransactionPartner { val paid_media_payload: PaidMediaPayload? = null, val gift: Gift? = null, val premium_subscription_duration: Int? = null, - val transaction_type: String? = null, + val transaction_type: TransactionType? = null, val request_count: Int? = null, val sponsor_user: PreviewBot? = null, val commission_per_mille: Int? = null, diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/payments/stars/TransactionType.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/payments/stars/TransactionType.kt new file mode 100644 index 0000000000..97df20f684 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/payments/stars/TransactionType.kt @@ -0,0 +1,38 @@ +package dev.inmo.tgbotapi.types.payments.stars + +import kotlinx.serialization.KSerializer +import kotlinx.serialization.Serializable +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder + +@Serializable(with = TransactionTypeSerializer::class) +enum class TransactionType { + INVOICE_PAYMENT, + PAID_MEDIA_PAYMENT, + GIFT_PURCHASE, + PREMIUM_PURCHASE, + BUSINESS_ACCOUNT_TRANSFER, + UNKNOWN +} + +private object TransactionTypeSerializer : KSerializer { + override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor( + serialName = "dev.inmo.tgbotapi.types.payments.stars.TransactionType", + kind = PrimitiveKind.STRING + ) + + override fun deserialize(decoder: Decoder): TransactionType { + return try { + TransactionType.valueOf(decoder.decodeString()) + } catch (e: IllegalArgumentException) { + TransactionType.UNKNOWN + } + } + + override fun serialize(encoder: Encoder, value: TransactionType) { + encoder.encodeString(value.name) + } +}