diff options
Diffstat (limited to 'core/commonMain/src/kotlinx/serialization/modules/SerializersModuleBuilders.kt')
-rw-r--r-- | core/commonMain/src/kotlinx/serialization/modules/SerializersModuleBuilders.kt | 26 |
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] |