summaryrefslogtreecommitdiff
path: root/core/commonMain/src/kotlinx/serialization/modules/SerializersModuleBuilders.kt
diff options
context:
space:
mode:
Diffstat (limited to 'core/commonMain/src/kotlinx/serialization/modules/SerializersModuleBuilders.kt')
-rw-r--r--core/commonMain/src/kotlinx/serialization/modules/SerializersModuleBuilders.kt26
1 files changed, 18 insertions, 8 deletions
diff --git a/core/commonMain/src/kotlinx/serialization/modules/SerializersModuleBuilders.kt b/core/commonMain/src/kotlinx/serialization/modules/SerializersModuleBuilders.kt
index 4c14f4b9..dfb9d819 100644
--- a/core/commonMain/src/kotlinx/serialization/modules/SerializersModuleBuilders.kt
+++ b/core/commonMain/src/kotlinx/serialization/modules/SerializersModuleBuilders.kt
@@ -34,6 +34,12 @@ public inline fun SerializersModule(builderAction: SerializersModuleBuilder.() -
}
/**
+ * A [SerializersModule] which is empty and returns `null` from each method.
+ */
+@Suppress("FunctionName")
+public fun EmptySerializersModule(): SerializersModule = @Suppress("DEPRECATION") EmptySerializersModule
+
+/**
* A builder class for [SerializersModule] DSL. To create an instance of builder, use [SerializersModule] factory function.
*/
@OptIn(ExperimentalSerializationApi::class)
@@ -92,11 +98,13 @@ public class SerializersModuleBuilder @PublishedApi internal constructor() : Ser
/**
* Adds a default serializers provider associated with the given [baseClass] to the resulting module.
- * [defaultSerializerProvider] is invoked when no polymorphic serializers for `value` were found.
+ * [defaultSerializerProvider] is invoked when no polymorphic serializers for `value` in the scope of [baseClass] were found.
+ *
+ * Default serializers provider affects only serialization process. To affect deserialization process, use
+ * [SerializersModuleBuilder.polymorphicDefaultDeserializer].
*
- * This will not affect deserialization.
+ * [defaultSerializerProvider] can be stateful and lookup a serializer for the missing type dynamically.
*/
- @ExperimentalSerializationApi
public override fun <Base : Any> polymorphicDefaultSerializer(
baseClass: KClass<Base>,
defaultSerializerProvider: (value: Base) -> SerializationStrategy<Base>?
@@ -107,17 +115,19 @@ public class SerializersModuleBuilder @PublishedApi internal constructor() : Ser
/**
* Adds a default deserializers provider associated with the given [baseClass] to the resulting module.
* [defaultDeserializerProvider] is invoked when no polymorphic serializers associated with the `className`
- * were found. `className` could be `null` for formats that support nullable class discriminators
+ * in the scope of [baseClass] were found. `className` could be `null` for formats that support nullable class discriminators
* (currently only `Json` with `useArrayPolymorphism` set to `false`).
*
- * This will not affect serialization.
+ * Default deserializers provider affects only deserialization process. To affect serialization process, use
+ * [SerializersModuleBuilder.polymorphicDefaultSerializer].
+ *
+ * [defaultDeserializerProvider] can be stateful and lookup a serializer for the missing type dynamically.
*
* @see PolymorphicModuleBuilder.defaultDeserializer
*/
- @ExperimentalSerializationApi
public override fun <Base : Any> polymorphicDefaultDeserializer(
baseClass: KClass<Base>,
- defaultDeserializerProvider: (className: String?) -> DeserializationStrategy<out Base>?
+ defaultDeserializerProvider: (className: String?) -> DeserializationStrategy<Base>?
) {
registerDefaultPolymorphicDeserializer(baseClass, defaultDeserializerProvider, false)
}
@@ -163,7 +173,7 @@ public class SerializersModuleBuilder @PublishedApi internal constructor() : Ser
@JvmName("registerDefaultPolymorphicDeserializer") // Don't mangle method name for prettier stack traces
internal fun <Base : Any> registerDefaultPolymorphicDeserializer(
baseClass: KClass<Base>,
- defaultDeserializerProvider: (className: String?) -> DeserializationStrategy<out Base>?,
+ defaultDeserializerProvider: (className: String?) -> DeserializationStrategy<Base>?,
allowOverwrite: Boolean
) {
val previous = polyBase2DefaultDeserializerProvider[baseClass]