diff options
author | Vsevolod Tolstopyatov <qwwdfsad@gmail.com> | 2020-07-08 15:19:21 +0300 |
---|---|---|
committer | Vsevolod Tolstopyatov <qwwdfsad@gmail.com> | 2020-07-09 11:17:34 -0700 |
commit | 5a991a6d6e768e678eefba159796aef0a4a8b396 (patch) | |
tree | 3fbf80e8b2c93df42d7b09598d3fada23d271ca5 | |
parent | aac42459d9b5725847965a6f83a8b0e247ae77ad (diff) | |
download | kotlinx.serialization-5a991a6d6e768e678eefba159796aef0a4a8b396.tar.gz |
[API stabilization] Builtin package stabilization
* Deprecate redundant extensions
* Merge all serializers into single file
* Extract AbstractDecoder and AbstractEncoder to a separate package
23 files changed, 273 insertions, 278 deletions
diff --git a/formats/cbor/commonMain/src/kotlinx/serialization/cbor/Cbor.kt b/formats/cbor/commonMain/src/kotlinx/serialization/cbor/Cbor.kt index 95489de6..ccb0c1c3 100644 --- a/formats/cbor/commonMain/src/kotlinx/serialization/cbor/Cbor.kt +++ b/formats/cbor/commonMain/src/kotlinx/serialization/cbor/Cbor.kt @@ -6,9 +6,9 @@ package kotlinx.serialization.cbor import kotlinx.serialization.* import kotlinx.serialization.CompositeDecoder.Companion.READ_DONE -import kotlinx.serialization.builtins.* import kotlinx.serialization.cbor.internal.ByteArrayInput import kotlinx.serialization.cbor.internal.ByteArrayOutput +import kotlinx.serialization.encoding.* import kotlinx.serialization.modules.* import kotlin.experimental.* diff --git a/formats/cbor/jvmTest/src/kotlinx/serialization/cbor/CborCompatibilityTest.kt b/formats/cbor/jvmTest/src/kotlinx/serialization/cbor/CborCompatibilityTest.kt index 76248f8b..4c599369 100644 --- a/formats/cbor/jvmTest/src/kotlinx/serialization/cbor/CborCompatibilityTest.kt +++ b/formats/cbor/jvmTest/src/kotlinx/serialization/cbor/CborCompatibilityTest.kt @@ -4,11 +4,11 @@ package kotlinx.serialization.cbor -import com.upokecenter.cbor.CBORObject +import com.upokecenter.cbor.* import kotlinx.serialization.* import kotlinx.serialization.builtins.* import org.junit.Test -import kotlin.test.assertEquals +import kotlin.test.* class CborCompatibilityTest { @@ -43,11 +43,13 @@ class CborCompatibilityTest { @Test fun basicListFromAnotherLibrary() { - compare(listOf( - SomeClass(1), - SomeClass(2), - SomeClass(3) - ), SomeClass.serializer().list) + compare( + listOf( + SomeClass(1), + SomeClass(2), + SomeClass(3) + ), ListSerializer(SomeClass.serializer()) + ) } @Test @@ -71,7 +73,7 @@ class CborCompatibilityTest { 30, mapOf("40" to IntData(40), "50" to IntData(50)) ) - val serial = SomeComplexClass.serializer(Int.serializer().list) + val serial = SomeComplexClass.serializer(ListSerializer(Int.serializer())) compare(obj, serial) } } diff --git a/formats/protobuf/commonTest/src/kotlinx/serialization/protobuf/CustomizedSerializableTestClasses.kt b/formats/protobuf/commonTest/src/kotlinx/serialization/protobuf/CustomizedSerializableTestClasses.kt index 4f8b9b98..6c307e55 100644 --- a/formats/protobuf/commonTest/src/kotlinx/serialization/protobuf/CustomizedSerializableTestClasses.kt +++ b/formats/protobuf/commonTest/src/kotlinx/serialization/protobuf/CustomizedSerializableTestClasses.kt @@ -49,7 +49,7 @@ data class CList2(@ProtoId(1) val d: Int = 5, @ProtoId(2) val c: List<C>) { companion object: KSerializer<CList2> { override fun serialize(encoder: Encoder, value: CList2) { val elemOutput = encoder.beginStructure(descriptor) - elemOutput.encodeSerializableElement(descriptor, 1, C.list, value.c) + elemOutput.encodeSerializableElement(descriptor, 1, ListSerializer(C), value.c) if (value.d != 5) elemOutput.encodeIntElement(descriptor, 0, value.d) elemOutput.endStructure(descriptor) } @@ -62,7 +62,7 @@ data class CList3(@ProtoId(1) val e: List<C> = emptyList(), @ProtoId(2) val f: I companion object: KSerializer<CList3> { override fun serialize(encoder: Encoder, value: CList3) { val elemOutput = encoder.beginStructure(descriptor) - if (value.e.isNotEmpty()) elemOutput.encodeSerializableElement(descriptor, 0, C.list, value.e) + if (value.e.isNotEmpty()) elemOutput.encodeSerializableElement(descriptor, 0, ListSerializer(C), value.e) elemOutput.encodeIntElement(descriptor, 1, value.f) elemOutput.endStructure(descriptor) } @@ -76,7 +76,7 @@ data class CList4(@ProtoId(1) val g: List<C> = emptyList(), @ProtoId(2) val h: I override fun serialize(encoder: Encoder, value: CList4) { val elemOutput = encoder.beginStructure(descriptor) elemOutput.encodeIntElement(descriptor, 1, value.h) - if (value.g.isNotEmpty()) elemOutput.encodeSerializableElement(descriptor, 0, C.list, value.g) + if (value.g.isNotEmpty()) elemOutput.encodeSerializableElement(descriptor, 0, ListSerializer(C), value.g) elemOutput.endStructure(descriptor) } } @@ -89,8 +89,11 @@ data class CList5(@ProtoId(1) val g: List<Int> = emptyList(), @ProtoId(2) val h: override fun serialize(encoder: Encoder, value: CList5) { val elemOutput = encoder.beginStructure(descriptor) elemOutput.encodeIntElement(descriptor, 1, value.h) - if (value.g.isNotEmpty()) elemOutput.encodeSerializableElement(descriptor, 0, Int.serializer().list, - value.g) + if (value.g.isNotEmpty()) elemOutput.encodeSerializableElement( + descriptor, 0, + ListSerializer(Int.serializer()), + value.g + ) elemOutput.endStructure(descriptor) } } diff --git a/runtime/api/kotlinx-serialization-runtime.api b/runtime/api/kotlinx-serialization-runtime.api index 92424972..e7beec7f 100644 --- a/runtime/api/kotlinx-serialization-runtime.api +++ b/runtime/api/kotlinx-serialization-runtime.api @@ -473,7 +473,53 @@ public abstract interface annotation class kotlinx/serialization/UseSerializers public abstract fun serializerClasses ()[Ljava/lang/Class; } -public abstract class kotlinx/serialization/builtins/AbstractDecoder : kotlinx/serialization/CompositeDecoder, kotlinx/serialization/Decoder { +public final class kotlinx/serialization/builtins/BuiltinSerializersKt { + public static final fun ArraySerializer (Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; + public static final fun BooleanArraySerializer ()Lkotlinx/serialization/KSerializer; + public static final fun ByteArraySerializer ()Lkotlinx/serialization/KSerializer; + public static final fun CharArraySerializer ()Lkotlinx/serialization/KSerializer; + public static final fun DoubleArraySerializer ()Lkotlinx/serialization/KSerializer; + public static final fun FloatArraySerializer ()Lkotlinx/serialization/KSerializer; + public static final fun IntArraySerializer ()Lkotlinx/serialization/KSerializer; + public static final fun ListSerializer (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; + public static final fun LongArraySerializer ()Lkotlinx/serialization/KSerializer; + public static final fun MapEntrySerializer (Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; + public static final fun MapSerializer (Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; + public static final fun PairSerializer (Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; + public static final fun SetSerializer (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; + public static final fun ShortArraySerializer ()Lkotlinx/serialization/KSerializer; + public static final fun TripleSerializer (Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; + public static final fun getNullable (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; + public static final fun serializer (Lkotlin/Unit;)Lkotlinx/serialization/KSerializer; + public static final fun serializer (Lkotlin/jvm/internal/BooleanCompanionObject;)Lkotlinx/serialization/KSerializer; + public static final fun serializer (Lkotlin/jvm/internal/ByteCompanionObject;)Lkotlinx/serialization/KSerializer; + public static final fun serializer (Lkotlin/jvm/internal/CharCompanionObject;)Lkotlinx/serialization/KSerializer; + public static final fun serializer (Lkotlin/jvm/internal/DoubleCompanionObject;)Lkotlinx/serialization/KSerializer; + public static final fun serializer (Lkotlin/jvm/internal/FloatCompanionObject;)Lkotlinx/serialization/KSerializer; + public static final fun serializer (Lkotlin/jvm/internal/IntCompanionObject;)Lkotlinx/serialization/KSerializer; + public static final fun serializer (Lkotlin/jvm/internal/LongCompanionObject;)Lkotlinx/serialization/KSerializer; + public static final fun serializer (Lkotlin/jvm/internal/ShortCompanionObject;)Lkotlinx/serialization/KSerializer; + public static final fun serializer (Lkotlin/jvm/internal/StringCompanionObject;)Lkotlinx/serialization/KSerializer; +} + +public final class kotlinx/serialization/builtins/BuiltinsMigrationsKt { + public static final fun UnitSerializer ()Lkotlinx/serialization/KSerializer; + public static final fun getList (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; + public static final fun getSet (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; +} + +public final class kotlinx/serialization/builtins/LongAsStringSerializer : kotlinx/serialization/KSerializer { + public static final field INSTANCE Lkotlinx/serialization/builtins/LongAsStringSerializer; + public fun deserialize (Lkotlinx/serialization/Decoder;)Ljava/lang/Long; + public synthetic fun deserialize (Lkotlinx/serialization/Decoder;)Ljava/lang/Object; + public fun getDescriptor ()Lkotlinx/serialization/SerialDescriptor; + public fun patch (Lkotlinx/serialization/Decoder;J)Ljava/lang/Long; + public synthetic fun patch (Lkotlinx/serialization/Decoder;Ljava/lang/Object;)Ljava/lang/Object; + public fun serialize (Lkotlinx/serialization/Encoder;J)V + public synthetic fun serialize (Lkotlinx/serialization/Encoder;Ljava/lang/Object;)V +} + +public abstract class kotlinx/serialization/encoding/AbstractDecoder : kotlinx/serialization/CompositeDecoder, kotlinx/serialization/Decoder { public fun <init> ()V public fun beginStructure (Lkotlinx/serialization/SerialDescriptor;)Lkotlinx/serialization/CompositeDecoder; public fun beginStructure (Lkotlinx/serialization/SerialDescriptor;[Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/CompositeDecoder; @@ -503,7 +549,7 @@ public abstract class kotlinx/serialization/builtins/AbstractDecoder : kotlinx/s public final fun decodeSerializableElement (Lkotlinx/serialization/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; public fun decodeSerializableValue (Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object; public fun decodeSerializableValue (Lkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; - public static synthetic fun decodeSerializableValue$default (Lkotlinx/serialization/builtins/AbstractDecoder;Lkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object; + public static synthetic fun decodeSerializableValue$default (Lkotlinx/serialization/encoding/AbstractDecoder;Lkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object; public fun decodeShort ()S public final fun decodeShortElement (Lkotlinx/serialization/SerialDescriptor;I)S public fun decodeString ()Ljava/lang/String; @@ -520,7 +566,7 @@ public abstract class kotlinx/serialization/builtins/AbstractDecoder : kotlinx/s public fun updateSerializableValue (Lkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; } -public abstract class kotlinx/serialization/builtins/AbstractEncoder : kotlinx/serialization/CompositeEncoder, kotlinx/serialization/Encoder { +public abstract class kotlinx/serialization/encoding/AbstractEncoder : kotlinx/serialization/CompositeEncoder, kotlinx/serialization/Encoder { public fun <init> ()V public fun beginCollection (Lkotlinx/serialization/SerialDescriptor;I)Lkotlinx/serialization/CompositeEncoder; public fun beginCollection (Lkotlinx/serialization/SerialDescriptor;I[Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/CompositeEncoder; @@ -560,55 +606,6 @@ public abstract class kotlinx/serialization/builtins/AbstractEncoder : kotlinx/s public fun shouldEncodeElementDefault (Lkotlinx/serialization/SerialDescriptor;I)Z } -public final class kotlinx/serialization/builtins/BuiltinSerializersKt { - public static final fun MapEntrySerializer (Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; - public static final fun PairSerializer (Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; - public static final fun TripleSerializer (Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; - public static final fun getNullable (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; -} - -public final class kotlinx/serialization/builtins/CollectionSerializersKt { - public static final fun ListSerializer (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; - public static final fun MapSerializer (Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; - public static final fun SetSerializer (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; - public static final fun getList (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; - public static final fun getSet (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; -} - -public final class kotlinx/serialization/builtins/LongAsStringSerializer : kotlinx/serialization/KSerializer { - public static final field INSTANCE Lkotlinx/serialization/builtins/LongAsStringSerializer; - public fun deserialize (Lkotlinx/serialization/Decoder;)Ljava/lang/Long; - public synthetic fun deserialize (Lkotlinx/serialization/Decoder;)Ljava/lang/Object; - public fun getDescriptor ()Lkotlinx/serialization/SerialDescriptor; - public fun patch (Lkotlinx/serialization/Decoder;J)Ljava/lang/Long; - public synthetic fun patch (Lkotlinx/serialization/Decoder;Ljava/lang/Object;)Ljava/lang/Object; - public fun serialize (Lkotlinx/serialization/Encoder;J)V - public synthetic fun serialize (Lkotlinx/serialization/Encoder;Ljava/lang/Object;)V -} - -public final class kotlinx/serialization/builtins/PrimitiveSerializersKt { - public static final fun ArraySerializer (Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; - public static final fun BooleanArraySerializer ()Lkotlinx/serialization/KSerializer; - public static final fun ByteArraySerializer ()Lkotlinx/serialization/KSerializer; - public static final fun CharArraySerializer ()Lkotlinx/serialization/KSerializer; - public static final fun DoubleArraySerializer ()Lkotlinx/serialization/KSerializer; - public static final fun FloatArraySerializer ()Lkotlinx/serialization/KSerializer; - public static final fun IntArraySerializer ()Lkotlinx/serialization/KSerializer; - public static final fun LongArraySerializer ()Lkotlinx/serialization/KSerializer; - public static final fun ShortArraySerializer ()Lkotlinx/serialization/KSerializer; - public static final fun UnitSerializer ()Lkotlinx/serialization/KSerializer; - public static final fun serializer (Lkotlin/Unit;)Lkotlinx/serialization/KSerializer; - public static final fun serializer (Lkotlin/jvm/internal/BooleanCompanionObject;)Lkotlinx/serialization/KSerializer; - public static final fun serializer (Lkotlin/jvm/internal/ByteCompanionObject;)Lkotlinx/serialization/KSerializer; - public static final fun serializer (Lkotlin/jvm/internal/CharCompanionObject;)Lkotlinx/serialization/KSerializer; - public static final fun serializer (Lkotlin/jvm/internal/DoubleCompanionObject;)Lkotlinx/serialization/KSerializer; - public static final fun serializer (Lkotlin/jvm/internal/FloatCompanionObject;)Lkotlinx/serialization/KSerializer; - public static final fun serializer (Lkotlin/jvm/internal/IntCompanionObject;)Lkotlinx/serialization/KSerializer; - public static final fun serializer (Lkotlin/jvm/internal/LongCompanionObject;)Lkotlinx/serialization/KSerializer; - public static final fun serializer (Lkotlin/jvm/internal/ShortCompanionObject;)Lkotlinx/serialization/KSerializer; - public static final fun serializer (Lkotlin/jvm/internal/StringCompanionObject;)Lkotlinx/serialization/KSerializer; -} - public abstract class kotlinx/serialization/internal/AbstractCollectionSerializer : kotlinx/serialization/KSerializer { protected abstract fun builder ()Ljava/lang/Object; protected abstract fun builderSize (Ljava/lang/Object;)I diff --git a/runtime/commonMain/src/kotlinx/serialization/Migrations.kt b/runtime/commonMain/src/kotlinx/serialization/Migrations.kt index 38e8a044..65f54cff 100644 --- a/runtime/commonMain/src/kotlinx/serialization/Migrations.kt +++ b/runtime/commonMain/src/kotlinx/serialization/Migrations.kt @@ -5,6 +5,7 @@ package kotlinx.serialization import kotlinx.serialization.builtins.* +import kotlinx.serialization.encoding.* import kotlinx.serialization.internal.* import kotlinx.serialization.modules.* import kotlin.internal.* @@ -71,13 +72,13 @@ public val <K, V> Pair<KSerializer<K>, KSerializer<V>>.map: KSerializer<Map<K, V @Deprecated( "Renamed to AbstractEncoder", - replaceWith = ReplaceWith("AbstractEncoder", imports = ["kotlinx.serialization.builtins.AbstractEncoder"]) + replaceWith = ReplaceWith("AbstractEncoder", imports = ["kotlinx.serialization.encoding.AbstractEncoder"]) ) public typealias ElementValueEncoder = AbstractEncoder @Deprecated( "Renamed to AbstractDecoder", - replaceWith = ReplaceWith("AbstractDecoder", imports = ["kotlinx.serialization.builtins.AbstractDecoder"]) + replaceWith = ReplaceWith("AbstractDecoder", imports = ["kotlinx.serialization.encoding.AbstractDecoder"]) ) public typealias ElementValueDecoder = AbstractDecoder @@ -110,7 +111,7 @@ public annotation class SerialId @Deprecated( @Deprecated(level = DeprecationLevel.WARNING, message = "Use default parse overload instead", replaceWith = ReplaceWith("parse(objects)")) public inline fun <reified T : Any> StringFormat.parseList(objects: String): List<T> = - decodeFromString(context.getContextualOrDefault<T>().list, objects) + decodeFromString(ListSerializer(context.getContextualOrDefault<T>()), objects) @Deprecated( level = DeprecationLevel.WARNING, @@ -129,7 +130,7 @@ public inline fun <reified K : Any, reified V : Any> StringFormat.parseMap(map: replaceWith = ReplaceWith("encodeToString(objects)") ) public inline fun <reified T : Any> StringFormat.stringify(objects: List<T>): String = - encodeToString(context.getContextualOrDefault<T>().list, objects) + encodeToString(ListSerializer(context.getContextualOrDefault<T>()), objects) @LowPriorityInOverloadResolution @Deprecated( diff --git a/runtime/commonMain/src/kotlinx/serialization/builtins/BuiltinSerializers.kt b/runtime/commonMain/src/kotlinx/serialization/builtins/BuiltinSerializers.kt index 7b0875ba..bb7dcdc2 100644 --- a/runtime/commonMain/src/kotlinx/serialization/builtins/BuiltinSerializers.kt +++ b/runtime/commonMain/src/kotlinx/serialization/builtins/BuiltinSerializers.kt @@ -7,6 +7,7 @@ package kotlinx.serialization.builtins import kotlinx.serialization.* import kotlinx.serialization.internal.* +import kotlin.reflect.* /** * Returns a nullable serializer for the given serializer of non-null type. @@ -47,3 +48,141 @@ public fun <A, B, C> TripleSerializer( cSerializer: KSerializer<C> ): KSerializer<Triple<A, B, C>> = kotlinx.serialization.internal.TripleSerializer(aSerializer, bSerializer, cSerializer) +/** + * Returns serializer for [Char] with [descriptor][SerialDescriptor] of [PrimitiveKind.CHAR] kind. + */ +public fun Char.Companion.serializer(): KSerializer<Char> = CharSerializer + +/** + * Returns serializer for [CharArray] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. + * Each element of the array is serialized one by one with [Char.Companion.serializer]. + */ +@Suppress("UNCHECKED_CAST") +public fun CharArraySerializer(): KSerializer<CharArray> = CharArraySerializer + +/** + * Returns serializer for [Byte] with [descriptor][SerialDescriptor] of [PrimitiveKind.BYTE] kind. + */ +public fun Byte.Companion.serializer(): KSerializer<Byte> = ByteSerializer + +/** + * Returns serializer for [ByteArray] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. + * Each element of the array is serialized one by one with [Byte.Companion.serializer]. + */ +public fun ByteArraySerializer(): KSerializer<ByteArray> = ByteArraySerializer + +/** + * Returns serializer for [Short] with [descriptor][SerialDescriptor] of [PrimitiveKind.SHORT] kind. + */ +public fun Short.Companion.serializer(): KSerializer<Short> = ShortSerializer + +/** + * Returns serializer for [ShortArray] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. + * Each element of the array is serialized one by one with [Short.Companion.serializer]. + */ +public fun ShortArraySerializer(): KSerializer<ShortArray> = ShortArraySerializer + +/** + * Returns serializer for [Int] with [descriptor][SerialDescriptor] of [PrimitiveKind.INT] kind. + */ +public fun Int.Companion.serializer(): KSerializer<Int> = IntSerializer + +/** + * Returns serializer for [IntArray] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. + * Each element of the array is serialized one by one with [Int.Companion.serializer]. + */ +public fun IntArraySerializer(): KSerializer<IntArray> = IntArraySerializer + +/** + * Returns serializer for [Long] with [descriptor][SerialDescriptor] of [PrimitiveKind.LONG] kind. + */ +public fun Long.Companion.serializer(): KSerializer<Long> = LongSerializer + +/** + * Returns serializer for [LongArray] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. + * Each element of the array is serialized one by one with [Long.Companion.serializer]. + */ +public fun LongArraySerializer(): KSerializer<LongArray> = LongArraySerializer + +/** + * Returns serializer for [Float] with [descriptor][SerialDescriptor] of [PrimitiveKind.FLOAT] kind. + */ +public fun Float.Companion.serializer(): KSerializer<Float> = FloatSerializer + +/** + * Returns serializer for [FloatArray] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. + * Each element of the array is serialized one by one with [Float.Companion.serializer]. + */ +public fun FloatArraySerializer(): KSerializer<FloatArray> = FloatArraySerializer + +/** + * Returns serializer for [Double] with [descriptor][SerialDescriptor] of [PrimitiveKind.DOUBLE] kind. + */ +public fun Double.Companion.serializer(): KSerializer<Double> = DoubleSerializer + +/** + * Returns serializer for [DoubleArray] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. + * Each element of the array is serialized one by one with [Double.Companion.serializer]. + */ +public fun DoubleArraySerializer(): KSerializer<DoubleArray> = DoubleArraySerializer + +/** + * Returns serializer for [Boolean] with [descriptor][SerialDescriptor] of [PrimitiveKind.BOOLEAN] kind. + */ +public fun Boolean.Companion.serializer(): KSerializer<Boolean> = BooleanSerializer + +/** + * Returns serializer for [BooleanArray] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. + * Each element of the array is serialized one by one with [Boolean.Companion.serializer]. + */ +public fun BooleanArraySerializer(): KSerializer<BooleanArray> = BooleanArraySerializer + +/** + * Returns serializer for [Unit] with [descriptor][SerialDescriptor] of [StructureKind.OBJECT] kind. + */ +@Suppress("unused") +public fun Unit.serializer(): KSerializer<Unit> = UnitSerializer + +/** + * Returns serializer for [String] with [descriptor][SerialDescriptor] of [PrimitiveKind.STRING] kind. + */ +public fun String.Companion.serializer(): KSerializer<String> = StringSerializer + +/** + * Returns serializer for reference [Array] of type [E] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. + * Each element of the array is serialized with the given [elementSerializer]. + */ +@Suppress("UNCHECKED_CAST") +public inline fun <reified T : Any, reified E : T?> ArraySerializer(elementSerializer: KSerializer<E>): KSerializer<Array<E>> = + ArraySerializer<T, E>(T::class, elementSerializer) + +/** + * Returns serializer for reference [Array] of type [E] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. + * Each element of the array is serialized with the given [elementSerializer]. + */ +public fun <T : Any, E : T?> ArraySerializer( + kClass: KClass<T>, + elementSerializer: KSerializer<E> +): KSerializer<Array<E>> = ReferenceArraySerializer<T, E>(kClass, elementSerializer) + +/** + * Creates a serializer for [`List<T>`][List] for the given serializer of type [T]. + */ +public fun <T> ListSerializer(elementSerializer: KSerializer<T>): KSerializer<List<T>> = + ArrayListSerializer(elementSerializer) + +/** + * Creates a serializer for [`Set<T>`][Set] for the given serializer of type [T]. + */ +public fun <T> SetSerializer(elementSerializer: KSerializer<T>): KSerializer<Set<T>> = + LinkedHashSetSerializer(elementSerializer) + +/** + * Creates a serializer for [`Map<K, V>`][Map] for the given serializers for + * its ket type [K] and value type [V]. + */ +public fun <K, V> MapSerializer( + keySerializer: KSerializer<K>, + valueSerializer: KSerializer<V> +): KSerializer<Map<K, V>> = LinkedHashMapSerializer(keySerializer, valueSerializer) + diff --git a/runtime/commonMain/src/kotlinx/serialization/builtins/BuiltinsMigrations.kt b/runtime/commonMain/src/kotlinx/serialization/builtins/BuiltinsMigrations.kt new file mode 100644 index 00000000..689e4af7 --- /dev/null +++ b/runtime/commonMain/src/kotlinx/serialization/builtins/BuiltinsMigrations.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + */ + +package kotlinx.serialization.builtins + +import kotlinx.serialization.* +import kotlinx.serialization.internal.* + +@Deprecated( + message = "Deprecated in the favour of Unit.serializer() extension", + level = DeprecationLevel.ERROR, + replaceWith = ReplaceWith("Unit.serializer()", imports = ["kotlinx.serialization.builtins.serializer"]) +) +public fun UnitSerializer(): KSerializer<Unit> = Unit.serializer() + +@Deprecated( + message = "Deprecated during serialization 1.0 API stabilization", + level = DeprecationLevel.ERROR, + replaceWith = ReplaceWith("ListSerializer(this)") +) +public val <T> KSerializer<T>.list: KSerializer<List<T>> + get() = ListSerializer(this) + +@Deprecated( + message = "Deprecated during serialization 1.0 API stabilization", + level = DeprecationLevel.ERROR, + replaceWith = ReplaceWith("SetSerializer(this)") +) +public val <T> KSerializer<T>.set: KSerializer<Set<T>> + get() = SetSerializer(this) diff --git a/runtime/commonMain/src/kotlinx/serialization/builtins/CollectionSerializers.kt b/runtime/commonMain/src/kotlinx/serialization/builtins/CollectionSerializers.kt deleted file mode 100644 index 5fc70fc0..00000000 --- a/runtime/commonMain/src/kotlinx/serialization/builtins/CollectionSerializers.kt +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ -@file:Suppress("DEPRECATION_ERROR", "FunctionName") - -package kotlinx.serialization.builtins - -import kotlinx.serialization.* -import kotlinx.serialization.internal.* - -/** - * Creates a serializer for [`List<T>`][List] for the given serializer of type [T]. - */ -public val <T> KSerializer<T>.list: KSerializer<List<T>> - get() = ArrayListSerializer(this) - -/** - * Creates a serializer for [`List<T>`][List] for the given serializer of type [T]. - */ -public fun <T> ListSerializer(elementSerializer: KSerializer<T>): KSerializer<List<T>> = - ArrayListSerializer(elementSerializer) - -/** - * Creates a serializer for [`Set<T>`][Set] for the given serializer of type [T]. - */ -public val <T> KSerializer<T>.set: KSerializer<Set<T>> - get() = LinkedHashSetSerializer(this) - -/** - * Creates a serializer for [`Set<T>`][Set] for the given serializer of type [T]. - */ -public fun <T> SetSerializer(elementSerializer: KSerializer<T>): KSerializer<Set<T>> = - LinkedHashSetSerializer(elementSerializer) - -/** - * Creates a serializer for [`Map<K, V>`][Map] for the given serializers for - * its ket type [K] and value type [V]. - */ -public fun <K, V> MapSerializer( - keySerializer: KSerializer<K>, - valueSerializer: KSerializer<V> -): KSerializer<Map<K, V>> = LinkedHashMapSerializer(keySerializer, valueSerializer) diff --git a/runtime/commonMain/src/kotlinx/serialization/builtins/PrimitiveSerializers.kt b/runtime/commonMain/src/kotlinx/serialization/builtins/PrimitiveSerializers.kt deleted file mode 100644 index 8bb0952d..00000000 --- a/runtime/commonMain/src/kotlinx/serialization/builtins/PrimitiveSerializers.kt +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ -@file:Suppress("DEPRECATION_ERROR", "FunctionName") - -package kotlinx.serialization.builtins - -import kotlinx.serialization.* -import kotlinx.serialization.internal.* -import kotlin.reflect.* - -/** - * Returns serializer for [Char] with [descriptor][SerialDescriptor] of [PrimitiveKind.CHAR] kind. - */ -public fun Char.Companion.serializer(): KSerializer<Char> = kotlinx.serialization.internal.CharSerializer - -/** - * Returns serializer for [CharArray] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. - * Each element of the array is serialized one by one with [Char.Companion.serializer]. - */ -@Suppress("UNCHECKED_CAST") -public fun CharArraySerializer(): KSerializer<CharArray> = CharArraySerializer - -/** - * Returns serializer for [Byte] with [descriptor][SerialDescriptor] of [PrimitiveKind.BYTE] kind. - */ -public fun Byte.Companion.serializer(): KSerializer<Byte> = kotlinx.serialization.internal.ByteSerializer - -/** - * Returns serializer for [ByteArray] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. - * Each element of the array is serialized one by one with [Byte.Companion.serializer]. - */ -public fun ByteArraySerializer(): KSerializer<ByteArray> = ByteArraySerializer - -/** - * Returns serializer for [Short] with [descriptor][SerialDescriptor] of [PrimitiveKind.SHORT] kind. - */ -public fun Short.Companion.serializer(): KSerializer<Short> = kotlinx.serialization.internal.ShortSerializer - -/** - * Returns serializer for [ShortArray] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. - * Each element of the array is serialized one by one with [Short.Companion.serializer]. - */ -public fun ShortArraySerializer(): KSerializer<ShortArray> = ShortArraySerializer - -/** - * Returns serializer for [Int] with [descriptor][SerialDescriptor] of [PrimitiveKind.INT] kind. - */ -public fun Int.Companion.serializer(): KSerializer<Int> = kotlinx.serialization.internal.IntSerializer - -/** - * Returns serializer for [IntArray] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. - * Each element of the array is serialized one by one with [Int.Companion.serializer]. - */ -public fun IntArraySerializer(): KSerializer<IntArray> = IntArraySerializer - -/** - * Returns serializer for [Long] with [descriptor][SerialDescriptor] of [PrimitiveKind.LONG] kind. - */ -public fun Long.Companion.serializer(): KSerializer<Long> = kotlinx.serialization.internal.LongSerializer - -/** - * Returns serializer for [LongArray] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. - * Each element of the array is serialized one by one with [Long.Companion.serializer]. - */ -public fun LongArraySerializer(): KSerializer<LongArray> = LongArraySerializer - -/** - * Returns serializer for [Float] with [descriptor][SerialDescriptor] of [PrimitiveKind.FLOAT] kind. - */ -public fun Float.Companion.serializer(): KSerializer<Float> = kotlinx.serialization.internal.FloatSerializer - -/** - * Returns serializer for [FloatArray] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. - * Each element of the array is serialized one by one with [Float.Companion.serializer]. - */ -public fun FloatArraySerializer(): KSerializer<FloatArray> = FloatArraySerializer - -/** - * Returns serializer for [Double] with [descriptor][SerialDescriptor] of [PrimitiveKind.DOUBLE] kind. - */ -public fun Double.Companion.serializer(): KSerializer<Double> = kotlinx.serialization.internal.DoubleSerializer - -/** - * Returns serializer for [DoubleArray] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. - * Each element of the array is serialized one by one with [Double.Companion.serializer]. - */ -public fun DoubleArraySerializer(): KSerializer<DoubleArray> = DoubleArraySerializer - -/** - * Returns serializer for [Boolean] with [descriptor][SerialDescriptor] of [PrimitiveKind.BOOLEAN] kind. - */ -public fun Boolean.Companion.serializer(): KSerializer<Boolean> = kotlinx.serialization.internal.BooleanSerializer - -/** - * Returns serializer for [BooleanArray] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. - * Each element of the array is serialized one by one with [Boolean.Companion.serializer]. - */ -public fun BooleanArraySerializer(): KSerializer<BooleanArray> = BooleanArraySerializer - -/** - * Returns serializer for [Unit] with [descriptor][SerialDescriptor] of [StructureKind.OBJECT] kind. - */ -@Deprecated( - message = "Deprecated in the favour of Unit.serializer() extension", - level = DeprecationLevel.ERROR, - replaceWith = ReplaceWith("Unit.serializer()", imports = ["kotlinx.serialization.builtins.serializer"]) -) -public fun UnitSerializer(): KSerializer<Unit> = kotlinx.serialization.internal.UnitSerializer - -/** - * Returns serializer for [Unit] with [descriptor][SerialDescriptor] of [StructureKind.OBJECT] kind. - */ -public fun Unit.serializer(): KSerializer<Unit> = kotlinx.serialization.internal.UnitSerializer - -/** - * Returns serializer for [String] with [descriptor][SerialDescriptor] of [PrimitiveKind.STRING] kind. - */ -public fun String.Companion.serializer(): KSerializer<String> = kotlinx.serialization.internal.StringSerializer - -/** - * Returns serializer for reference [Array] of type [E] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. - * Each element of the array is serialized with the given [elementSerializer]. - */ -@Suppress("UNCHECKED_CAST") -public inline fun <reified T : Any, reified E : T?> ArraySerializer(elementSerializer: KSerializer<E>): KSerializer<Array<E>> = - ArraySerializer<T, E>(T::class, elementSerializer) - -/** - * Returns serializer for reference [Array] of type [E] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. - * Each element of the array is serialized with the given [elementSerializer]. - */ -public fun <T : Any, E : T?> ArraySerializer( - kClass: KClass<T>, - elementSerializer: KSerializer<E> -): KSerializer<Array<E>> = ReferenceArraySerializer<T, E>(kClass, elementSerializer) diff --git a/runtime/commonMain/src/kotlinx/serialization/builtins/AbstractDecoder.kt b/runtime/commonMain/src/kotlinx/serialization/encoding/AbstractDecoder.kt index 07bbe13e..5dd6ddb5 100644 --- a/runtime/commonMain/src/kotlinx/serialization/builtins/AbstractDecoder.kt +++ b/runtime/commonMain/src/kotlinx/serialization/encoding/AbstractDecoder.kt @@ -2,9 +2,10 @@ * Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. */ -package kotlinx.serialization.builtins +package kotlinx.serialization.encoding import kotlinx.serialization.* +import kotlinx.serialization.builtins.* import kotlinx.serialization.modules.* /** diff --git a/runtime/commonMain/src/kotlinx/serialization/builtins/AbstractEncoder.kt b/runtime/commonMain/src/kotlinx/serialization/encoding/AbstractEncoder.kt index 3450755a..1fe836f2 100644 --- a/runtime/commonMain/src/kotlinx/serialization/builtins/AbstractEncoder.kt +++ b/runtime/commonMain/src/kotlinx/serialization/encoding/AbstractEncoder.kt @@ -2,9 +2,10 @@ * Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. */ -package kotlinx.serialization.builtins +package kotlinx.serialization.encoding import kotlinx.serialization.* +import kotlinx.serialization.builtins.* import kotlinx.serialization.modules.* /** diff --git a/runtime/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonDecoder.kt b/runtime/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonDecoder.kt index df0e54ce..57696c53 100644 --- a/runtime/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonDecoder.kt +++ b/runtime/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonDecoder.kt @@ -6,7 +6,7 @@ package kotlinx.serialization.json.internal import kotlinx.serialization.* import kotlinx.serialization.CompositeDecoder.Companion.UNKNOWN_NAME -import kotlinx.serialization.builtins.* +import kotlinx.serialization.encoding.* import kotlinx.serialization.json.* import kotlinx.serialization.modules.* import kotlin.jvm.* diff --git a/runtime/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonEncoder.kt b/runtime/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonEncoder.kt index 75c6172a..6b03c028 100644 --- a/runtime/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonEncoder.kt +++ b/runtime/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonEncoder.kt @@ -5,7 +5,7 @@ package kotlinx.serialization.json.internal import kotlinx.serialization.* -import kotlinx.serialization.builtins.* +import kotlinx.serialization.encoding.* import kotlinx.serialization.json.* import kotlinx.serialization.modules.* import kotlin.jvm.* diff --git a/runtime/commonTest/src/kotlinx/serialization/BasicTypesSerializationTest.kt b/runtime/commonTest/src/kotlinx/serialization/BasicTypesSerializationTest.kt index 1672bb3c..9cbf0a01 100644 --- a/runtime/commonTest/src/kotlinx/serialization/BasicTypesSerializationTest.kt +++ b/runtime/commonTest/src/kotlinx/serialization/BasicTypesSerializationTest.kt @@ -5,7 +5,7 @@ package kotlinx.serialization import kotlinx.serialization.CompositeDecoder.Companion.READ_DONE -import kotlinx.serialization.builtins.* +import kotlinx.serialization.encoding.* import kotlin.test.* /* diff --git a/runtime/commonTest/src/kotlinx/serialization/UnknownElementIndexTest.kt b/runtime/commonTest/src/kotlinx/serialization/UnknownElementIndexTest.kt index 03a0fab7..25da54e0 100644 --- a/runtime/commonTest/src/kotlinx/serialization/UnknownElementIndexTest.kt +++ b/runtime/commonTest/src/kotlinx/serialization/UnknownElementIndexTest.kt @@ -5,7 +5,7 @@ package kotlinx.serialization import kotlinx.serialization.CompositeDecoder.Companion.UNKNOWN_NAME -import kotlinx.serialization.builtins.* +import kotlinx.serialization.encoding.* import kotlinx.serialization.json.Json import kotlin.test.Test import kotlin.test.assertFailsWith diff --git a/runtime/commonTest/src/kotlinx/serialization/features/SealedClassesSerializationTest.kt b/runtime/commonTest/src/kotlinx/serialization/features/SealedClassesSerializationTest.kt index 7d9ef1e8..75296c1d 100644 --- a/runtime/commonTest/src/kotlinx/serialization/features/SealedClassesSerializationTest.kt +++ b/runtime/commonTest/src/kotlinx/serialization/features/SealedClassesSerializationTest.kt @@ -169,7 +169,7 @@ class SealedClassesSerializationTest : JsonTestBase() { ) val expected = """[{"type":"SealedProtocol.StringMessage","description":"string message","message":"foo"},{"type":"SealedProtocol.IntMessage","description":"int message","message":42},{"type":"SealedProtocol.ErrorMessage","error":"requesting termination"},{"type":"EOF"}]""" - assertJsonFormAndRestored(SealedProtocol.serializer().list, messages, expected, json) + assertJsonFormAndRestored(ListSerializer(SealedProtocol.serializer()), messages, expected, json) } @Test @@ -193,7 +193,7 @@ class SealedClassesSerializationTest : JsonTestBase() { ) val expected = """[{"type":"ProtocolWithAbstractClass.Message.StringMessage","description":"string message","message":"foo"},{"type":"ProtocolWithAbstractClass.Message.IntMessage","description":"int message","message":42},{"type":"ProtocolWithAbstractClass.ErrorMessage","error":"requesting termination"},{"type":"EOF"}]""" - assertJsonFormAndRestored(ProtocolWithAbstractClass.serializer().list, messages, expected, json) + assertJsonFormAndRestored(ListSerializer(ProtocolWithAbstractClass.serializer()), messages, expected, json) } @Test @@ -206,7 +206,7 @@ class SealedClassesSerializationTest : JsonTestBase() { ) val expected = """[{"type":"ProtocolWithSealedClass.Message.StringMessage","description":"string message","message":"foo"},{"type":"ProtocolWithSealedClass.Message.IntMessage","description":"int message","message":42},{"type":"ProtocolWithSealedClass.ErrorMessage","error":"requesting termination"},{"type":"EOF"}]""" - assertJsonFormAndRestored(ProtocolWithSealedClass.serializer().list, messages, expected, json) + assertJsonFormAndRestored(ListSerializer(ProtocolWithSealedClass.serializer()), messages, expected, json) } @Test @@ -218,8 +218,8 @@ class SealedClassesSerializationTest : JsonTestBase() { val expected = """[{"type":"ProtocolWithSealedClass.Message.StringMessage","description":"string message","message":"foo"},{"type":"ProtocolWithSealedClass.Message.IntMessage","description":"int message","message":42}]""" - assertJsonFormAndRestored(ProtocolWithSealedClass.serializer().list, messages, expected, json) - assertJsonFormAndRestored(ProtocolWithSealedClass.Message.serializer().list, messages, expected, json) + assertJsonFormAndRestored(ListSerializer(ProtocolWithSealedClass.serializer()), messages, expected, json) + assertJsonFormAndRestored(ListSerializer(ProtocolWithSealedClass.Message.serializer()), messages, expected, json) } @Test @@ -233,6 +233,6 @@ class SealedClassesSerializationTest : JsonTestBase() { val expected = """[["ProtocolWithGenericClass.Message",{"description":"string message","message":["kotlin.String","foo"]}],["ProtocolWithGenericClass.Message",{"description":"int message","message":["kotlin.Int",42]}],["ProtocolWithGenericClass.ErrorMessage",{"error":"requesting termination"}],["EOF",{}]]""" val json = Json(JsonConfiguration.Default.copy(useArrayPolymorphism = true)) - assertJsonFormAndRestored(ProtocolWithGenericClass.serializer().list, messages, expected, json) + assertJsonFormAndRestored(ListSerializer(ProtocolWithGenericClass.serializer()), messages, expected, json) } } diff --git a/runtime/commonTest/src/kotlinx/serialization/json/JsonCustomSerializersTest.kt b/runtime/commonTest/src/kotlinx/serialization/json/JsonCustomSerializersTest.kt index 5b05c5a9..0e5b4c78 100644 --- a/runtime/commonTest/src/kotlinx/serialization/json/JsonCustomSerializersTest.kt +++ b/runtime/commonTest/src/kotlinx/serialization/json/JsonCustomSerializersTest.kt @@ -59,7 +59,7 @@ class JsonCustomSerializersTest : JsonTestBase() { companion object : KSerializer<CList2> { override fun serialize(encoder: Encoder, value: CList2) { val elemOutput = encoder.beginStructure(descriptor) - elemOutput.encodeSerializableElement(descriptor, 1, C.list, value.c) + elemOutput.encodeSerializableElement(descriptor, 1, ListSerializer(C), value.c) if (value.d != 5) elemOutput.encodeIntElement(descriptor, 0, value.d) elemOutput.endStructure(descriptor) } @@ -72,7 +72,7 @@ class JsonCustomSerializersTest : JsonTestBase() { companion object : KSerializer<CList3> { override fun serialize(encoder: Encoder, value: CList3) { val elemOutput = encoder.beginStructure(descriptor) - if (value.e.isNotEmpty()) elemOutput.encodeSerializableElement(descriptor, 0, C.list, value.e) + if (value.e.isNotEmpty()) elemOutput.encodeSerializableElement(descriptor, 0, ListSerializer(C), value.e) elemOutput.encodeIntElement(descriptor, 1, value.f) elemOutput.endStructure(descriptor) } @@ -86,7 +86,7 @@ class JsonCustomSerializersTest : JsonTestBase() { override fun serialize(encoder: Encoder, value: CList4) { val elemOutput = encoder.beginStructure(descriptor) elemOutput.encodeIntElement(descriptor, 1, value.h) - if (value.g.isNotEmpty()) elemOutput.encodeSerializableElement(descriptor, 0, C.list, value.g) + if (value.g.isNotEmpty()) elemOutput.encodeSerializableElement(descriptor, 0, ListSerializer(C), value.g) elemOutput.endStructure(descriptor) } } @@ -100,7 +100,7 @@ class JsonCustomSerializersTest : JsonTestBase() { val elemOutput = encoder.beginStructure(descriptor) elemOutput.encodeIntElement(descriptor, 1, value.h) if (value.g.isNotEmpty()) elemOutput.encodeSerializableElement( - descriptor, 0, Int.serializer().list, + descriptor, 0, ListSerializer(Int.serializer()), value.g ) elemOutput.endStructure(descriptor) @@ -148,7 +148,7 @@ class JsonCustomSerializersTest : JsonTestBase() { fun testWriteCustomListRootLevel() = parametrizedTest { useStreaming -> val obj = listOf(B(1), B(2), B(3)) val j = createJsonWithB() - val s = j.encodeToString(BSerializer.list, obj, useStreaming) + val s = j.encodeToString(ListSerializer(BSerializer), obj, useStreaming) assertEquals("[1,2,3]", s) } @@ -156,7 +156,7 @@ class JsonCustomSerializersTest : JsonTestBase() { fun testReadCustomListRootLevel() = parametrizedTest { useStreaming -> val obj = listOf(B(1), B(2), B(3)) val j = createJsonWithB() - val bs = j.decodeFromString(BSerializer.list, "[1,2,3]", useStreaming) + val bs = j.decodeFromString(ListSerializer(BSerializer), "[1,2,3]", useStreaming) assertEquals(obj, bs) } @@ -191,7 +191,7 @@ class JsonCustomSerializersTest : JsonTestBase() { @Test fun testWriteListOfOptional() = parametrizedTest { useStreaming -> val obj = listOf(C(a = 1), C(b = 2), C(3, 4)) - val s = default.encodeToString(C.list, obj, useStreaming) + val s = default.encodeToString(ListSerializer(C), obj, useStreaming) assertEquals("""[{"b":42,"a":1},{"b":2},{"b":4,"a":3}]""", s) } @@ -199,7 +199,7 @@ class JsonCustomSerializersTest : JsonTestBase() { fun testReadListOfOptional() = parametrizedTest { useStreaming -> val obj = listOf(C(a = 1), C(b = 2), C(3, 4)) val j = """[{"b":42,"a":1},{"b":2},{"b":4,"a":3}]""" - val s = default.decodeFromString(C.list, j, useStreaming) + val s = default.decodeFromString(ListSerializer<kotlinx.serialization.json.JsonCustomSerializersTest.C>(C), j, useStreaming) assertEquals(obj, s) } diff --git a/runtime/commonTest/src/kotlinx/serialization/json/JsonTransformingSerializerTest.kt b/runtime/commonTest/src/kotlinx/serialization/json/JsonTransformingSerializerTest.kt index 1ba3c352..5e8188c6 100644 --- a/runtime/commonTest/src/kotlinx/serialization/json/JsonTransformingSerializerTest.kt +++ b/runtime/commonTest/src/kotlinx/serialization/json/JsonTransformingSerializerTest.kt @@ -19,7 +19,7 @@ class JsonTransformingSerializerTest : JsonTestBase() { ) object WrappingJsonListSerializer : - JsonTransformingSerializer<List<StringData>>(StringData.serializer().list, "WrappingList") { + JsonTransformingSerializer<List<StringData>>(ListSerializer(StringData.serializer()), "WrappingList") { override fun readTransform(element: JsonElement): JsonElement = if (element !is JsonArray) JsonArray(listOf(element)) else element } diff --git a/runtime/jsMain/src/kotlinx/serialization/DynamicObjectSerializer.kt b/runtime/jsMain/src/kotlinx/serialization/DynamicObjectSerializer.kt index 1fa94df7..675b8393 100644 --- a/runtime/jsMain/src/kotlinx/serialization/DynamicObjectSerializer.kt +++ b/runtime/jsMain/src/kotlinx/serialization/DynamicObjectSerializer.kt @@ -1,8 +1,7 @@ package kotlinx.serialization -import kotlinx.serialization.builtins.AbstractEncoder -import kotlinx.serialization.builtins.list -import kotlinx.serialization.builtins.nullable +import kotlinx.serialization.builtins.* +import kotlinx.serialization.encoding.AbstractEncoder import kotlinx.serialization.json.JsonConfiguration import kotlinx.serialization.json.internal.BEGIN_LIST import kotlinx.serialization.json.internal.BEGIN_OBJ @@ -10,7 +9,6 @@ import kotlinx.serialization.json.internal.END_LIST import kotlinx.serialization.json.internal.END_OBJ import kotlinx.serialization.modules.EmptyModule import kotlinx.serialization.modules.SerialModule -import kotlinx.serialization.modules.getContextualOrDefault import kotlin.math.abs import kotlin.math.floor @@ -56,7 +54,7 @@ public class DynamicObjectSerializer @OptIn(UnstableDefault::class) constructor( serialize(serializer(), obj) public inline fun <reified T : Any> serialize(obj: List<T?>): dynamic = - serialize(serializer<T>().nullable.list, obj) + serialize(ListSerializer(serializer<T>().nullable), obj) } private class DynamicObjectEncoder(val configuration: JsonConfiguration, val encodeNullAsUndefined: Boolean) : diff --git a/runtime/jsTest/src/kotlinx/serialization/DynamicSerializerTest.kt b/runtime/jsTest/src/kotlinx/serialization/DynamicSerializerTest.kt index c2d7cf2b..30de178f 100644 --- a/runtime/jsTest/src/kotlinx/serialization/DynamicSerializerTest.kt +++ b/runtime/jsTest/src/kotlinx/serialization/DynamicSerializerTest.kt @@ -145,7 +145,7 @@ class DynamicSerializerTest { @Test fun listTest() { - assertDynamicForm(listOf(1, 2, 3, 44), serializer = Int.serializer().list) { data, serialized -> + assertDynamicForm(listOf(1, 2, 3, 44), serializer = ListSerializer(Int.serializer())) { data, serialized -> assertNotNull(serialized.length, "length property should exist") assertEquals(data.size, serialized.length) diff --git a/runtime/jvmTest/src/kotlinx/serialization/SerializationMethodInvocationOrderTest.kt b/runtime/jvmTest/src/kotlinx/serialization/SerializationMethodInvocationOrderTest.kt index 5e245383..ee5fb3ea 100644 --- a/runtime/jvmTest/src/kotlinx/serialization/SerializationMethodInvocationOrderTest.kt +++ b/runtime/jvmTest/src/kotlinx/serialization/SerializationMethodInvocationOrderTest.kt @@ -4,7 +4,7 @@ package kotlinx.serialization -import kotlinx.serialization.builtins.* +import kotlinx.serialization.encoding.* import org.junit.Test import kotlin.test.* diff --git a/runtime/jvmTest/src/kotlinx/serialization/SerializeFlatTest.kt b/runtime/jvmTest/src/kotlinx/serialization/SerializeFlatTest.kt index f62896e6..be73b6c3 100644 --- a/runtime/jvmTest/src/kotlinx/serialization/SerializeFlatTest.kt +++ b/runtime/jvmTest/src/kotlinx/serialization/SerializeFlatTest.kt @@ -4,7 +4,7 @@ package kotlinx.serialization -import kotlinx.serialization.builtins.* +import kotlinx.serialization.encoding.* import org.junit.Test import kotlin.test.* diff --git a/runtime/jvmTest/src/kotlinx/serialization/features/JsonUpdateCustomTest.kt b/runtime/jvmTest/src/kotlinx/serialization/features/JsonUpdateCustomTest.kt index 493812cb..270b5d0d 100644 --- a/runtime/jvmTest/src/kotlinx/serialization/features/JsonUpdateCustomTest.kt +++ b/runtime/jvmTest/src/kotlinx/serialization/features/JsonUpdateCustomTest.kt @@ -46,7 +46,7 @@ class JsonUpdateCustomTest : JsonTestBase() { @Test fun canUpdateValuesInMap() { - val parsed = json.decodeFromString(WrappedMap.serializer(Int.serializer().list), """{"mp": { "x" : [23], "x" : [42], "y": [4] }}""") + val parsed = json.decodeFromString(WrappedMap.serializer(ListSerializer(Int.serializer())), """{"mp": { "x" : [23], "x" : [42], "y": [4] }}""") assertEquals(WrappedMap(mapOf("x" to listOf(42), "y" to listOf(4))), parsed) } } |