tgbotapi/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/Message.kt

53 lines
1.9 KiB
Kotlin
Raw Normal View History

2020-10-04 11:06:30 +00:00
package dev.inmo.tgbotapi.types.message.abstracts
2018-12-26 08:07:24 +00:00
2020-11-05 18:12:14 +00:00
import com.soywiz.klock.DateTime
2022-08-05 18:39:46 +00:00
import dev.inmo.tgbotapi.utils.internal.ClassCastsIncluded
2020-10-04 11:06:30 +00:00
import dev.inmo.tgbotapi.types.MessageIdentifier
2022-04-21 18:16:41 +00:00
import dev.inmo.tgbotapi.types.chat.Chat
2020-10-04 11:06:30 +00:00
import dev.inmo.tgbotapi.types.message.RawMessage
import kotlinx.serialization.*
2020-08-18 06:50:11 +00:00
import kotlinx.serialization.descriptors.*
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
2018-12-26 08:07:24 +00:00
2022-08-05 10:31:39 +00:00
@ClassCastsIncluded
2018-12-26 08:07:24 +00:00
interface Message {
val messageId: MessageIdentifier
val chat: Chat
val date: DateTime
}
data class UnknownMessageType(
override val messageId: MessageIdentifier,
override val chat: Chat,
override val date: DateTime,
val insideException: Exception
) : Message
internal class TelegramBotAPIMessageDeserializationStrategyClass<T> : DeserializationStrategy<T> {
2021-12-30 05:50:41 +00:00
@OptIn(InternalSerializationApi::class)
2020-08-18 06:50:11 +00:00
override val descriptor: SerialDescriptor = buildSerialDescriptor("TelegramBotAPIMessageSerializer", PolymorphicKind.OPEN)
2020-03-22 10:41:48 +00:00
@Suppress("UNCHECKED_CAST")
override fun deserialize(decoder: Decoder): T {
return RawMessage.serializer().deserialize(decoder).asMessage as T
}
}
internal class TelegramBotAPIMessageDeserializeOnlySerializerClass<T : Message> : KSerializer<T> {
private val deserializer = TelegramBotAPIMessageDeserializationStrategyClass<T>()
2021-12-30 05:50:41 +00:00
@OptIn(InternalSerializationApi::class)
override val descriptor: SerialDescriptor
get() = deserializer.descriptor
override fun deserialize(decoder: Decoder): T {
return deserializer.deserialize(decoder)
}
2020-03-22 07:37:01 +00:00
override fun serialize(encoder: Encoder, value: T) {
throw UnsupportedOperationException("Currently, Message objects can't be serialized y this serializer")
}
}
internal object TelegramBotAPIMessageDeserializeOnlySerializer
: KSerializer<Message> by TelegramBotAPIMessageDeserializeOnlySerializerClass()