xref: /aosp_15_r20/external/kotlinx.serialization/guide/example/example-serializer-10.kt (revision 57b5a4a64c534cf7f27ac9427ceab07f3d8ed3d8)
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.exampleSerializer10
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 import kotlinx.serialization.builtins.IntArraySerializer
10*57b5a4a6SAndroid Build Coastguard Worker 
11*57b5a4a6SAndroid Build Coastguard Worker class ColorIntArraySerializer : KSerializer<Color> {
12*57b5a4a6SAndroid Build Coastguard Worker     private val delegateSerializer = IntArraySerializer()
13*57b5a4a6SAndroid Build Coastguard Worker     override val descriptor = SerialDescriptor("Color", delegateSerializer.descriptor)
14*57b5a4a6SAndroid Build Coastguard Worker 
serializenull15*57b5a4a6SAndroid Build Coastguard Worker     override fun serialize(encoder: Encoder, value: Color) {
16*57b5a4a6SAndroid Build Coastguard Worker         val data = intArrayOf(
17*57b5a4a6SAndroid Build Coastguard Worker             (value.rgb shr 16) and 0xFF,
18*57b5a4a6SAndroid Build Coastguard Worker             (value.rgb shr 8) and 0xFF,
19*57b5a4a6SAndroid Build Coastguard Worker             value.rgb and 0xFF
20*57b5a4a6SAndroid Build Coastguard Worker         )
21*57b5a4a6SAndroid Build Coastguard Worker         encoder.encodeSerializableValue(delegateSerializer, data)
22*57b5a4a6SAndroid Build Coastguard Worker     }
23*57b5a4a6SAndroid Build Coastguard Worker 
deserializenull24*57b5a4a6SAndroid Build Coastguard Worker     override fun deserialize(decoder: Decoder): Color {
25*57b5a4a6SAndroid Build Coastguard Worker         val array = decoder.decodeSerializableValue(delegateSerializer)
26*57b5a4a6SAndroid Build Coastguard Worker         return Color((array[0] shl 16) or (array[1] shl 8) or array[2])
27*57b5a4a6SAndroid Build Coastguard Worker     }
28*57b5a4a6SAndroid Build Coastguard Worker }
29*57b5a4a6SAndroid Build Coastguard Worker 
30*57b5a4a6SAndroid Build Coastguard Worker @Serializable(with = ColorIntArraySerializer::class)
31*57b5a4a6SAndroid Build Coastguard Worker class Color(val rgb: Int)
32*57b5a4a6SAndroid Build Coastguard Worker 
mainnull33*57b5a4a6SAndroid Build Coastguard Worker fun main() {
34*57b5a4a6SAndroid Build Coastguard Worker     val green = Color(0x00ff00)
35*57b5a4a6SAndroid Build Coastguard Worker     println(Json.encodeToString(green))
36*57b5a4a6SAndroid Build Coastguard Worker }
37