• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 @file:UseContextualSerialization(ContextualTest.Cont::class)
2 
3 package kotlinx.serialization.test
4 
5 import kotlinx.serialization.KSerializer
6 import kotlinx.serialization.Serializable
7 import kotlinx.serialization.UseContextualSerialization
8 import kotlinx.serialization.descriptors.PrimitiveKind
9 import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
10 import kotlinx.serialization.descriptors.SerialDescriptor
11 import kotlinx.serialization.encodeToString
12 import kotlinx.serialization.encoding.Decoder
13 import kotlinx.serialization.encoding.Encoder
14 import kotlinx.serialization.json.Json
15 import kotlinx.serialization.modules.SerializersModule
16 import kotlinx.serialization.modules.contextual
17 
18 class ContextualTest {
19     data class Cont(val i: Int)
20 
21     @Serializable
22     data class DateHolder(val cont: Cont?)
23 
24     object DateSerializer: KSerializer<Cont> {
deserializenull25         override fun deserialize(decoder: Decoder): Cont {
26             return Cont(decoder.decodeInt())
27         }
28 
29         override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("ContSerializer", PrimitiveKind.INT)
30 
serializenull31         override fun serialize(encoder: Encoder, value: Cont) {
32             encoder.encodeInt(value.i)
33         }
34 
35     }
36 
<lambda>null37     val module = SerializersModule {
38         contextual(DateSerializer)
39     }
40 
41     @kotlin.test.Test
testnull42     fun test() {
43         val json = Json { serializersModule = module }
44 
45         println(json.encodeToString(DateHolder(Cont(42))))
46     }
47 }
48