1*57b5a4a6SAndroid Build Coastguard Worker // This file was automatically generated from serializers.md by Knit tool. Do not edit.
2*57b5a4a6SAndroid Build Coastguard Worker package example.exampleSerializer13
3*57b5a4a6SAndroid Build Coastguard Worker
4*57b5a4a6SAndroid Build Coastguard Worker import kotlinx.serialization.*
5*57b5a4a6SAndroid Build Coastguard Worker import kotlinx.serialization.json.*
6*57b5a4a6SAndroid Build Coastguard Worker import kotlinx.serialization.encoding.*
7*57b5a4a6SAndroid Build Coastguard Worker import kotlinx.serialization.descriptors.*
8*57b5a4a6SAndroid Build Coastguard Worker
9*57b5a4a6SAndroid Build Coastguard Worker object ColorAsObjectSerializer : KSerializer<Color> {
10*57b5a4a6SAndroid Build Coastguard Worker
11*57b5a4a6SAndroid Build Coastguard Worker override val descriptor: SerialDescriptor =
<lambda>null12*57b5a4a6SAndroid Build Coastguard Worker buildClassSerialDescriptor("Color") {
13*57b5a4a6SAndroid Build Coastguard Worker element<Int>("r")
14*57b5a4a6SAndroid Build Coastguard Worker element<Int>("g")
15*57b5a4a6SAndroid Build Coastguard Worker element<Int>("b")
16*57b5a4a6SAndroid Build Coastguard Worker }
17*57b5a4a6SAndroid Build Coastguard Worker
serializenull18*57b5a4a6SAndroid Build Coastguard Worker override fun serialize(encoder: Encoder, value: Color) =
19*57b5a4a6SAndroid Build Coastguard Worker encoder.encodeStructure(descriptor) {
20*57b5a4a6SAndroid Build Coastguard Worker encodeIntElement(descriptor, 0, (value.rgb shr 16) and 0xff)
21*57b5a4a6SAndroid Build Coastguard Worker encodeIntElement(descriptor, 1, (value.rgb shr 8) and 0xff)
22*57b5a4a6SAndroid Build Coastguard Worker encodeIntElement(descriptor, 2, value.rgb and 0xff)
23*57b5a4a6SAndroid Build Coastguard Worker }
24*57b5a4a6SAndroid Build Coastguard Worker
deserializenull25*57b5a4a6SAndroid Build Coastguard Worker override fun deserialize(decoder: Decoder): Color =
26*57b5a4a6SAndroid Build Coastguard Worker decoder.decodeStructure(descriptor) {
27*57b5a4a6SAndroid Build Coastguard Worker var r = -1
28*57b5a4a6SAndroid Build Coastguard Worker var g = -1
29*57b5a4a6SAndroid Build Coastguard Worker var b = -1
30*57b5a4a6SAndroid Build Coastguard Worker if (decodeSequentially()) { // sequential decoding protocol
31*57b5a4a6SAndroid Build Coastguard Worker r = decodeIntElement(descriptor, 0)
32*57b5a4a6SAndroid Build Coastguard Worker g = decodeIntElement(descriptor, 1)
33*57b5a4a6SAndroid Build Coastguard Worker b = decodeIntElement(descriptor, 2)
34*57b5a4a6SAndroid Build Coastguard Worker } else while (true) {
35*57b5a4a6SAndroid Build Coastguard Worker when (val index = decodeElementIndex(descriptor)) {
36*57b5a4a6SAndroid Build Coastguard Worker 0 -> r = decodeIntElement(descriptor, 0)
37*57b5a4a6SAndroid Build Coastguard Worker 1 -> g = decodeIntElement(descriptor, 1)
38*57b5a4a6SAndroid Build Coastguard Worker 2 -> b = decodeIntElement(descriptor, 2)
39*57b5a4a6SAndroid Build Coastguard Worker CompositeDecoder.DECODE_DONE -> break
40*57b5a4a6SAndroid Build Coastguard Worker else -> error("Unexpected index: $index")
41*57b5a4a6SAndroid Build Coastguard Worker }
42*57b5a4a6SAndroid Build Coastguard Worker }
43*57b5a4a6SAndroid Build Coastguard Worker require(r in 0..255 && g in 0..255 && b in 0..255)
44*57b5a4a6SAndroid Build Coastguard Worker Color((r shl 16) or (g shl 8) or b)
45*57b5a4a6SAndroid Build Coastguard Worker }
46*57b5a4a6SAndroid Build Coastguard Worker }
47*57b5a4a6SAndroid Build Coastguard Worker
48*57b5a4a6SAndroid Build Coastguard Worker @Serializable(with = ColorAsObjectSerializer::class)
49*57b5a4a6SAndroid Build Coastguard Worker data class Color(val rgb: Int)
50*57b5a4a6SAndroid Build Coastguard Worker
mainnull51*57b5a4a6SAndroid Build Coastguard Worker fun main() {
52*57b5a4a6SAndroid Build Coastguard Worker val color = Color(0x00ff00)
53*57b5a4a6SAndroid Build Coastguard Worker val string = Json.encodeToString(color)
54*57b5a4a6SAndroid Build Coastguard Worker println(string)
55*57b5a4a6SAndroid Build Coastguard Worker require(Json.decodeFromString<Color>(string) == color)
56*57b5a4a6SAndroid Build Coastguard Worker }
57