tgbotapi/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/update/abstracts/Update.kt

55 lines
1.8 KiB
Kotlin
Raw Normal View History

2020-10-04 11:06:30 +00:00
package dev.inmo.tgbotapi.types.update.abstracts
2018-12-26 08:07:24 +00:00
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.UpdateIdentifier
import dev.inmo.tgbotapi.types.update.RawUpdate
2021-05-29 09:34:14 +00:00
import dev.inmo.tgbotapi.utils.RiskFeature
2020-10-04 11:06:30 +00:00
import dev.inmo.tgbotapi.utils.nonstrictJsonFormat
2019-08-17 16:08:36 +00:00
import kotlinx.serialization.*
2020-08-18 06:50:11 +00:00
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.json.JsonElement
2018-12-26 08:07:24 +00:00
2022-08-05 10:31:39 +00:00
@ClassCastsIncluded
interface Update {
2018-12-26 08:07:24 +00:00
val updateId: UpdateIdentifier
val data: Any
2018-12-26 08:07:24 +00:00
}
2019-08-17 16:08:36 +00:00
2020-06-27 03:43:24 +00:00
data class UnknownUpdate(
2020-01-22 21:35:56 +00:00
override val updateId: UpdateIdentifier,
override val data: String,
val rawJson: JsonElement
2020-01-22 21:35:56 +00:00
) : Update
2021-05-29 09:34:14 +00:00
@RiskFeature
object UpdateSerializerWithoutSerialization : KSerializer<Update> {
2020-08-18 06:50:11 +00:00
override val descriptor: SerialDescriptor = JsonElement.serializer().descriptor
2019-08-17 16:08:36 +00:00
override fun deserialize(decoder: Decoder): Update = UpdateDeserializationStrategy.deserialize(decoder)
2020-03-22 07:37:01 +00:00
override fun serialize(encoder: Encoder, value: Update) = throw UnsupportedOperationException()
2019-08-17 16:08:36 +00:00
}
/**
* Use this object to deserialize objects with type [Update]. Currently it is restricted to use this
* [DeserializationStrategy] only with JSON
*
* @see StringFormat.parse
* @see kotlinx.serialization.json.Json.parse
*/
object UpdateDeserializationStrategy : DeserializationStrategy<Update> {
2020-08-18 06:50:11 +00:00
override val descriptor: SerialDescriptor = JsonElement.serializer().descriptor
2019-08-17 16:08:36 +00:00
override fun deserialize(decoder: Decoder): Update {
2020-08-18 06:50:11 +00:00
val asJson = JsonElement.serializer().deserialize(decoder)
return nonstrictJsonFormat.decodeFromJsonElement(
2020-01-22 21:31:56 +00:00
RawUpdate.serializer(),
asJson
).asUpdate(
2020-01-22 22:01:24 +00:00
asJson
2020-01-22 21:31:56 +00:00
)
2019-08-17 16:08:36 +00:00
}
}