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
|
2023-03-16 13:29:35 +00:00
|
|
|
import dev.inmo.tgbotapi.abstracts.WithChat
|
2022-08-05 18:39:46 +00:00
|
|
|
import dev.inmo.tgbotapi.utils.internal.ClassCastsIncluded
|
2022-09-14 18:17:18 +00:00
|
|
|
import dev.inmo.tgbotapi.types.MessageId
|
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
|
2019-08-17 05:50:46 +00:00
|
|
|
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
|
2023-03-16 13:29:35 +00:00
|
|
|
interface Message : WithChat {
|
2022-09-14 18:17:18 +00:00
|
|
|
val messageId: MessageId
|
2018-12-26 08:07:24 +00:00
|
|
|
val date: DateTime
|
2019-08-17 05:50:46 +00:00
|
|
|
}
|
|
|
|
|
2020-01-22 21:47:43 +00:00
|
|
|
data class UnknownMessageType(
|
2022-09-14 18:17:18 +00:00
|
|
|
override val messageId: MessageId,
|
2020-01-22 21:47:43 +00:00
|
|
|
override val chat: Chat,
|
|
|
|
override val date: DateTime,
|
|
|
|
val insideException: Exception
|
|
|
|
) : Message
|
|
|
|
|
2020-01-15 05:17:53 +00:00
|
|
|
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)
|
2019-08-17 05:50:46 +00:00
|
|
|
|
2020-03-22 10:41:48 +00:00
|
|
|
@Suppress("UNCHECKED_CAST")
|
2020-01-15 05:17:53 +00:00
|
|
|
override fun deserialize(decoder: Decoder): T {
|
|
|
|
return RawMessage.serializer().deserialize(decoder).asMessage as T
|
2019-08-17 05:50:46 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-01-15 05:17:53 +00:00
|
|
|
internal class TelegramBotAPIMessageDeserializeOnlySerializerClass<T : Message> : KSerializer<T> {
|
|
|
|
private val deserializer = TelegramBotAPIMessageDeserializationStrategyClass<T>()
|
2021-12-30 05:50:41 +00:00
|
|
|
@OptIn(InternalSerializationApi::class)
|
2019-08-17 05:50:46 +00:00
|
|
|
override val descriptor: SerialDescriptor
|
2020-01-15 05:17:53 +00:00
|
|
|
get() = deserializer.descriptor
|
2019-08-17 05:50:46 +00:00
|
|
|
|
2020-01-15 05:17:53 +00:00
|
|
|
override fun deserialize(decoder: Decoder): T {
|
|
|
|
return deserializer.deserialize(decoder)
|
2019-08-17 05:50:46 +00:00
|
|
|
}
|
|
|
|
|
2020-03-22 07:37:01 +00:00
|
|
|
override fun serialize(encoder: Encoder, value: T) {
|
2019-08-19 10:12:19 +00:00
|
|
|
throw UnsupportedOperationException("Currently, Message objects can't be serialized y this serializer")
|
2019-08-17 05:50:46 +00:00
|
|
|
}
|
|
|
|
}
|
2020-01-15 05:17:53 +00:00
|
|
|
internal object TelegramBotAPIMessageDeserializeOnlySerializer
|
|
|
|
: KSerializer<Message> by TelegramBotAPIMessageDeserializeOnlySerializerClass()
|