1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2024-06-17 07:15:26 +00:00
tgbotapi/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/buttons/KeyboardButtonRequestUsers.kt

108 lines
3.8 KiB
Kotlin
Raw Normal View History

2023-02-05 14:46:12 +00:00
package dev.inmo.tgbotapi.types.buttons
2024-01-03 10:28:56 +00:00
import dev.inmo.tgbotapi.types.*
2023-02-05 14:46:12 +00:00
import dev.inmo.tgbotapi.types.request.RequestId
import dev.inmo.tgbotapi.utils.internal.ClassCastsIncluded
2023-02-05 14:46:12 +00:00
import kotlinx.serialization.EncodeDefault
import kotlinx.serialization.KSerializer
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Serializer
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
2024-01-03 10:28:56 +00:00
@Serializable(KeyboardButtonRequestUsers.Companion::class)
@ClassCastsIncluded
2024-01-03 10:28:56 +00:00
sealed interface KeyboardButtonRequestUsers {
2023-02-05 14:46:12 +00:00
val requestId: RequestId
val isBot: Boolean?
2024-01-10 17:05:44 +00:00
val isPremium: Boolean?
2024-01-03 10:28:56 +00:00
val maxCount: Int
2023-02-05 14:46:12 +00:00
@Serializable
data class Any(
@SerialName(requestIdField)
2024-01-03 10:28:56 +00:00
override val requestId: RequestId,
2024-01-10 17:05:44 +00:00
@SerialName(userIsPremiumField)
override val isPremium: Boolean? = null,
2024-01-03 10:28:56 +00:00
@SerialName(maxQuantityField)
override val maxCount: Int = keyboardButtonRequestUserLimit.first
) : KeyboardButtonRequestUsers {
2023-02-05 14:46:12 +00:00
@SerialName(userIsBotField)
@EncodeDefault
override val isBot: Boolean? = null
}
@Serializable
data class Common(
@SerialName(requestIdField)
override val requestId: RequestId,
@SerialName(userIsPremiumField)
2024-01-10 17:05:44 +00:00
override val isPremium: Boolean? = null,
2024-01-03 10:28:56 +00:00
@SerialName(maxQuantityField)
override val maxCount: Int = keyboardButtonRequestUserLimit.first
) : KeyboardButtonRequestUsers {
2023-02-05 14:46:12 +00:00
@SerialName(userIsBotField)
@EncodeDefault
override val isBot: Boolean = false
}
@Serializable
data class Bot(
@SerialName(requestIdField)
2024-01-03 10:28:56 +00:00
override val requestId: RequestId,
@SerialName(maxQuantityField)
override val maxCount: Int = keyboardButtonRequestUserLimit.first
) : KeyboardButtonRequestUsers {
2023-02-05 14:46:12 +00:00
@SerialName(userIsBotField)
@EncodeDefault
override val isBot: Boolean = true
2024-01-10 17:05:44 +00:00
override val isPremium: Boolean?
get() = null
2023-02-05 14:46:12 +00:00
}
2024-01-03 10:28:56 +00:00
@Serializer(KeyboardButtonRequestUsers::class)
companion object : KSerializer<KeyboardButtonRequestUsers> {
2023-02-05 14:46:12 +00:00
@Serializable
private data class Surrogate(
@SerialName(requestIdField)
val requestId: RequestId,
@SerialName(userIsBotField)
val userIsBot: Boolean? = null,
@SerialName(userIsPremiumField)
2024-01-03 10:28:56 +00:00
val userIsPremium: Boolean? = null,
@SerialName(maxQuantityField)
val maxCount: Int = keyboardButtonRequestUserLimit.first
2023-02-05 14:46:12 +00:00
)
private val realSerializer = Surrogate.serializer()
override val descriptor: SerialDescriptor = realSerializer.descriptor
2024-01-03 10:28:56 +00:00
override fun deserialize(decoder: Decoder): KeyboardButtonRequestUsers {
2023-02-05 14:46:12 +00:00
val surrogate = realSerializer.deserialize(decoder)
return when (surrogate.userIsBot) {
2024-01-03 10:28:56 +00:00
true -> Bot(surrogate.requestId, surrogate.maxCount)
false -> Common(surrogate.requestId, surrogate.userIsPremium, surrogate.maxCount)
2024-01-10 17:05:44 +00:00
null -> Any(surrogate.requestId, surrogate.userIsPremium, surrogate.maxCount)
2023-02-05 14:46:12 +00:00
}
}
2024-01-03 10:28:56 +00:00
override fun serialize(encoder: Encoder, value: KeyboardButtonRequestUsers) {
2023-02-05 14:46:12 +00:00
realSerializer.serialize(
encoder,
Surrogate(
value.requestId,
value.isBot,
2024-01-03 10:28:56 +00:00
(value as? Common) ?.isPremium,
value.maxCount
2023-02-05 14:46:12 +00:00
)
)
}
}
}
2024-01-03 10:28:56 +00:00
@Deprecated("Renamed", ReplaceWith("KeyboardButtonRequestUsers", "dev.inmo.tgbotapi.types.buttons.KeyboardButtonRequestUsers"))
typealias KeyboardButtonRequestUser = KeyboardButtonRequestUsers