summaryrefslogtreecommitdiff
path: root/runtime/commonMain/src/kotlinx/serialization/modules/SerialModuleCollector.kt
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/commonMain/src/kotlinx/serialization/modules/SerialModuleCollector.kt')
-rw-r--r--runtime/commonMain/src/kotlinx/serialization/modules/SerialModuleCollector.kt38
1 files changed, 38 insertions, 0 deletions
diff --git a/runtime/commonMain/src/kotlinx/serialization/modules/SerialModuleCollector.kt b/runtime/commonMain/src/kotlinx/serialization/modules/SerialModuleCollector.kt
new file mode 100644
index 00000000..74a1f25b
--- /dev/null
+++ b/runtime/commonMain/src/kotlinx/serialization/modules/SerialModuleCollector.kt
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2017-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+@file:Suppress("RedundantVisibilityModifier")
+
+package kotlinx.serialization.modules
+
+import kotlinx.serialization.*
+import kotlin.reflect.KClass
+
+/**
+ * [SerialModuleCollector] can introspect and accumulate content of any [SerialModule] via [SerialModule.dumpTo],
+ * using a visitor-like pattern: [contextual] and [polymorphic] functions are invoked for each registered serializer.
+ */
+public interface SerialModuleCollector {
+
+ /**
+ * Accept a serializer, associated with [kClass] for contextual serialization.
+ */
+ public fun <T : Any> contextual(kClass: KClass<T>, serializer: KSerializer<T>)
+
+ /**
+ * Accept a serializer, associated with [actualClass] for polymorphic serialization.
+ */
+ public fun <Base : Any, Sub : Base> polymorphic(
+ baseClass: KClass<Base>,
+ actualClass: KClass<Sub>,
+ actualSerializer: KSerializer<Sub>
+ )
+}
+
+/**
+ * Version of [SerialModuleCollector.contextual] with reified argument.
+ */
+public inline fun <reified T: Any> SerialModuleCollector.contextual(serializer: KSerializer<T>) {
+ contextual(T::class, serializer)
+}