Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package net.nprod.vega4k.model
- import kotlinx.serialization.KSerializer
- import kotlinx.serialization.Serializable
- import kotlinx.serialization.SerializationException
- import kotlinx.serialization.descriptors.PrimitiveKind
- import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
- import kotlinx.serialization.descriptors.SerialDescriptor
- import kotlinx.serialization.encoding.Decoder
- import kotlinx.serialization.encoding.Encoder
- object ColorOrSignalSerializer : KSerializer<ColorOrSignal> {
- override fun deserialize(decoder: Decoder): ColorOrSignal {
- return try {
- Color(decoder.decodeString())
- } catch (e: SerializationException) {
- val value = decoder.decodeSerializableValue(ColorSignal.serializer())
- value
- }
- }
- override val descriptor: SerialDescriptor
- get() = PrimitiveSerialDescriptor("background", PrimitiveKind.STRING)
- override fun serialize(encoder: Encoder, value: ColorOrSignal) {
- when (value) {
- is Color -> encoder.encodeString(value.value)
- is ColorSignal -> encoder.encodeSerializableValue(ColorSignal.serializer(), value)
- }
- }
- }
- @Serializable(with = ColorOrSignalSerializer::class)
- interface ColorOrSignal
- @Serializable
- inline class Color(val value: String) : ColorOrSignal
- @Serializable
- data class ColorSignal(
- val signal: String
- ) : ColorOrSignal
Advertisement
Add Comment
Please, Sign In to add comment