Guest User

Untitled

a guest
Mar 18th, 2021
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. package net.nprod.vega4k.model
  2.  
  3. import kotlinx.serialization.KSerializer
  4. import kotlinx.serialization.Serializable
  5. import kotlinx.serialization.SerializationException
  6. import kotlinx.serialization.descriptors.PrimitiveKind
  7. import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
  8. import kotlinx.serialization.descriptors.SerialDescriptor
  9. import kotlinx.serialization.encoding.Decoder
  10. import kotlinx.serialization.encoding.Encoder
  11.  
  12. object ColorOrSignalSerializer : KSerializer<ColorOrSignal> {
  13. override fun deserialize(decoder: Decoder): ColorOrSignal {
  14. return try {
  15. Color(decoder.decodeString())
  16. } catch (e: SerializationException) {
  17. val value = decoder.decodeSerializableValue(ColorSignal.serializer())
  18. value
  19. }
  20. }
  21.  
  22. override val descriptor: SerialDescriptor
  23. get() = PrimitiveSerialDescriptor("background", PrimitiveKind.STRING)
  24.  
  25. override fun serialize(encoder: Encoder, value: ColorOrSignal) {
  26. when (value) {
  27. is Color -> encoder.encodeString(value.value)
  28. is ColorSignal -> encoder.encodeSerializableValue(ColorSignal.serializer(), value)
  29. }
  30. }
  31. }
  32.  
  33. @Serializable(with = ColorOrSignalSerializer::class)
  34. interface ColorOrSignal
  35.  
  36. @Serializable
  37. inline class Color(val value: String) : ColorOrSignal
  38.  
  39. @Serializable
  40. data class ColorSignal(
  41. val signal: String
  42. ) : ColorOrSignal
  43.  
Advertisement
Add Comment
Please, Sign In to add comment