mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2024-11-22 16:23:48 +00:00
fixes in LinkPreviewOptions
This commit is contained in:
parent
f0448485c8
commit
eac45b86a6
@ -1,10 +1,14 @@
|
|||||||
package dev.inmo.tgbotapi.types
|
package dev.inmo.tgbotapi.types
|
||||||
|
|
||||||
|
import kotlinx.serialization.KSerializer
|
||||||
import kotlinx.serialization.Required
|
import kotlinx.serialization.Required
|
||||||
import kotlinx.serialization.SerialName
|
import kotlinx.serialization.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||||
|
import kotlinx.serialization.encoding.Decoder
|
||||||
|
import kotlinx.serialization.encoding.Encoder
|
||||||
|
|
||||||
@Serializable
|
@Serializable(LinkPreviewOptions.Companion::class)
|
||||||
sealed interface LinkPreviewOptions {
|
sealed interface LinkPreviewOptions {
|
||||||
val isDisabled: Boolean
|
val isDisabled: Boolean
|
||||||
val url: String?
|
val url: String?
|
||||||
@ -76,4 +80,47 @@ sealed interface LinkPreviewOptions {
|
|||||||
override val preferLargeMedia: Boolean
|
override val preferLargeMedia: Boolean
|
||||||
get() = false
|
get() = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
private data class Surrogate(
|
||||||
|
@Required
|
||||||
|
@SerialName(isDisabledField)
|
||||||
|
val isDisabled: Boolean = true,
|
||||||
|
@SerialName(urlField)
|
||||||
|
val url: String? = null,
|
||||||
|
@SerialName(preferSmallMediaField)
|
||||||
|
val preferSmallMedia: Boolean = false,
|
||||||
|
@SerialName(preferLargeMediaField)
|
||||||
|
val preferLargeMedia: Boolean = false,
|
||||||
|
@SerialName(showAboveTextField)
|
||||||
|
val showAboveText: Boolean = false,
|
||||||
|
) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object : KSerializer<LinkPreviewOptions> {
|
||||||
|
override val descriptor: SerialDescriptor
|
||||||
|
get() = Surrogate.serializer().descriptor
|
||||||
|
|
||||||
|
override fun deserialize(decoder: Decoder): LinkPreviewOptions {
|
||||||
|
val surrogate = Surrogate.serializer().deserialize(decoder)
|
||||||
|
|
||||||
|
return when {
|
||||||
|
surrogate.isDisabled -> Disabled
|
||||||
|
surrogate.preferLargeMedia -> Large(surrogate.url, surrogate.showAboveText)
|
||||||
|
surrogate.preferSmallMedia -> Small(surrogate.url, surrogate.showAboveText)
|
||||||
|
else -> Medium(surrogate.url, surrogate.showAboveText)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun serialize(encoder: Encoder, value: LinkPreviewOptions) {
|
||||||
|
when (value) {
|
||||||
|
is Disabled -> Disabled.serializer().serialize(encoder, value)
|
||||||
|
is Large -> Large.serializer().serialize(encoder, value)
|
||||||
|
is Medium -> Medium.serializer().serialize(encoder, value)
|
||||||
|
is Small -> Small.serializer().serialize(encoder, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user