summaryrefslogtreecommitdiff
path: root/formats/json-tests/commonTest/src/kotlinx/serialization/test/ContextualTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'formats/json-tests/commonTest/src/kotlinx/serialization/test/ContextualTest.kt')
-rw-r--r--formats/json-tests/commonTest/src/kotlinx/serialization/test/ContextualTest.kt47
1 files changed, 47 insertions, 0 deletions
diff --git a/formats/json-tests/commonTest/src/kotlinx/serialization/test/ContextualTest.kt b/formats/json-tests/commonTest/src/kotlinx/serialization/test/ContextualTest.kt
new file mode 100644
index 00000000..0b34f1c7
--- /dev/null
+++ b/formats/json-tests/commonTest/src/kotlinx/serialization/test/ContextualTest.kt
@@ -0,0 +1,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))))
+ }
+}