diff options
Diffstat (limited to 'runtime/commonMain/src/kotlinx/serialization/modules/SerialModuleCollector.kt')
-rw-r--r-- | runtime/commonMain/src/kotlinx/serialization/modules/SerialModuleCollector.kt | 38 |
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) +} |