| // This file was automatically generated from serializers.md by Knit tool. Do not edit. |
| package example.exampleSerializer12 |
| |
| import kotlinx.serialization.* |
| import kotlinx.serialization.json.* |
| import kotlinx.serialization.encoding.* |
| import kotlinx.serialization.descriptors.* |
| |
| object ColorAsObjectSerializer : KSerializer<Color> { |
| |
| override val descriptor: SerialDescriptor = |
| buildClassSerialDescriptor("Color") { |
| element<Int>("r") |
| element<Int>("g") |
| element<Int>("b") |
| } |
| |
| override fun serialize(encoder: Encoder, value: Color) = |
| encoder.encodeStructure(descriptor) { |
| encodeIntElement(descriptor, 0, (value.rgb shr 16) and 0xff) |
| encodeIntElement(descriptor, 1, (value.rgb shr 8) and 0xff) |
| encodeIntElement(descriptor, 2, value.rgb and 0xff) |
| } |
| |
| override fun deserialize(decoder: Decoder): Color = |
| decoder.decodeStructure(descriptor) { |
| var r = -1 |
| var g = -1 |
| var b = -1 |
| while (true) { |
| when (val index = decodeElementIndex(descriptor)) { |
| 0 -> r = decodeIntElement(descriptor, 0) |
| 1 -> g = decodeIntElement(descriptor, 1) |
| 2 -> b = decodeIntElement(descriptor, 2) |
| CompositeDecoder.DECODE_DONE -> break |
| else -> error("Unexpected index: $index") |
| } |
| } |
| require(r in 0..255 && g in 0..255 && b in 0..255) |
| Color((r shl 16) or (g shl 8) or b) |
| } |
| } |
| |
| @Serializable(with = ColorAsObjectSerializer::class) |
| data class Color(val rgb: Int) |
| |
| fun main() { |
| val color = Color(0x00ff00) |
| val string = Json.encodeToString(color) |
| println(string) |
| require(Json.decodeFromString<Color>(string) == color) |
| } |