summaryrefslogtreecommitdiff
path: root/formats/json/commonTest/src/kotlinx/serialization/test/ContextualTest.kt
blob: 0b34f1c77d4f10ba7450b6e833f307cfbec66585 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
@file:UseContextualSerialization(ContextualTest.Cont::class)

package kotlinx.serialization.test

import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.UseContextualSerialization
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encodeToString
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.contextual

class ContextualTest {
    data class Cont(val i: Int)

    @Serializable
    data class DateHolder(val cont: Cont?)

    object DateSerializer: KSerializer<Cont> {
        override fun deserialize(decoder: Decoder): Cont {
            return Cont(decoder.decodeInt())
        }

        override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("ContSerializer", PrimitiveKind.INT)

        override fun serialize(encoder: Encoder, value: Cont) {
            encoder.encodeInt(value.i)
        }

    }

    val module = SerializersModule {
        contextual(DateSerializer)
    }

    @kotlin.test.Test
    fun test() {
        val json = Json { serializersModule = module }

        println(json.encodeToString(DateHolder(Cont(42))))
    }
}