From 284fe58848f3628f15499257c168381f0f866be7 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 29 Sep 2023 22:38:22 +0600 Subject: [PATCH] upfix of chatmember statuses serialization --- .../tgbotapi/types/chat/member/ChatMember.kt | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/chat/member/ChatMember.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/chat/member/ChatMember.kt index d8ea2691e6..b2598b7d67 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/chat/member/ChatMember.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/chat/member/ChatMember.kt @@ -7,6 +7,7 @@ import dev.inmo.tgbotapi.utils.nonstrictJsonFormat import kotlinx.serialization.DeserializationStrategy import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializable +import kotlinx.serialization.builtins.serializer import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder @@ -15,8 +16,11 @@ import kotlinx.serialization.json.jsonPrimitive @Serializable(ChatMemberSerializer::class) sealed interface ChatMember : WithUser { - @Serializable - enum class Status(val status: String, val deserializationStrategy: DeserializationStrategy) { + @Serializable(StatusSerializer::class) + enum class Status( + val status: String, + val deserializationStrategy: DeserializationStrategy + ) { Creator("creator", OwnerChatMember.serializer()), Administrator("administrator", AdministratorChatMemberImpl.serializer()), Member("member", MemberChatMemberImpl.serializer()), @@ -24,6 +28,23 @@ sealed interface ChatMember : WithUser { Left("left", LeftChatMemberImpl.serializer()), Kicked("kicked", KickedChatMember.serializer()) } + + object StatusSerializer : KSerializer { + override val descriptor: SerialDescriptor + get() = String.serializer().descriptor + + override fun deserialize(decoder: Decoder): Status { + val status = decoder.decodeString() + return Status.values().first { + it.status == status + } + } + + override fun serialize(encoder: Encoder, value: Status) { + encoder.encodeString(value.status) + } + } + val status: Status }