Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package kotlinx.serialization.protobuf

import kotlinx.serialization.*
import kotlinx.serialization.builtins.*
import kotlinx.serialization.descriptors.*

@Serializable
data class A(@ProtoId(1) val b: B)
Expand All @@ -21,7 +22,7 @@ object BSerializer : KSerializer<B> {
return B(decoder.decodeInt())
}

override val descriptor: SerialDescriptor = PrimitiveDescriptor("B", PrimitiveKind.INT)
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("B", PrimitiveKind.INT)
}

@Serializable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
package kotlinx.serialization.protobuf

import kotlinx.serialization.*
import kotlinx.serialization.json.*
import kotlinx.serialization.descriptors.*
import kotlin.test.*

class ProtobufMissingFieldsTest {
Expand Down Expand Up @@ -87,10 +87,10 @@ class ProtobufMissingFieldsTest {
)

class ItemPlatformSerializer : KSerializer<ItemPlatform> {

override val descriptor: SerialDescriptor = SerialDescriptor("ItemPlatform", UnionKind.ENUM_KIND) {
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
override val descriptor: SerialDescriptor = buildSerialDescriptor("ItemPlatform", UnionKind.ENUM_KIND) {
enumValues<ItemPlatform>().forEach {
element(it.name, SerialDescriptor("$serialName.${it.name}", StructureKind.OBJECT))
element(it.name, buildSerialDescriptor("$serialName.${it.name}", StructureKind.OBJECT))
}
}

Expand All @@ -106,9 +106,10 @@ class ProtobufMissingFieldsTest {

class ItemContextSerializer : KSerializer<ItemContext> {

override val descriptor: SerialDescriptor = SerialDescriptor("ItemContext", UnionKind.ENUM_KIND) {
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
override val descriptor: SerialDescriptor = buildSerialDescriptor("ItemContext", UnionKind.ENUM_KIND) {
enumValues<ItemContext>().forEach {
element(it.name, SerialDescriptor("$serialName.${it.name}", StructureKind.OBJECT))
element(it.name, buildSerialDescriptor("$serialName.${it.name}", StructureKind.OBJECT))
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
package kotlinx.serialization.protobuf

import kotlinx.serialization.*
import kotlinx.serialization.descriptors.*
import kotlinx.serialization.modules.SerializersModule

import org.junit.Test
Expand All @@ -18,7 +19,7 @@ class PolymorphicWithJvmClassTest {

@Serializer(forClass = Date::class)
object DateSerializer : KSerializer<Date> {
override val descriptor: SerialDescriptor = PrimitiveDescriptor("java.util.Date", PrimitiveKind.STRING)
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("java.util.Date", PrimitiveKind.STRING)

// Consider wrapping in ThreadLocal if serialization may happen in multiple threads
private val df: DateFormat = SimpleDateFormat("dd/MM/yyyy HH:mm:ss.SSS").apply {
Expand Down
63 changes: 30 additions & 33 deletions runtime/api/kotlinx-serialization-runtime.api
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,11 @@ public final class kotlinx/serialization/Mapper {
}

public final class kotlinx/serialization/MigrationsKt {
public static final fun PrimitiveDescriptor (Ljava/lang/String;Lkotlinx/serialization/PrimitiveKind;)Lkotlinx/serialization/SerialDescriptor;
public static final fun SerialDescriptor (Ljava/lang/String;Lkotlinx/serialization/SerialKind;[Lkotlinx/serialization/SerialDescriptor;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/SerialDescriptor;
public static final fun SerialDescriptor (Ljava/lang/String;[Lkotlinx/serialization/SerialDescriptor;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/SerialDescriptor;
public static synthetic fun SerialDescriptor$default (Ljava/lang/String;Lkotlinx/serialization/SerialKind;[Lkotlinx/serialization/SerialDescriptor;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/serialization/SerialDescriptor;
public static synthetic fun SerialDescriptor$default (Ljava/lang/String;[Lkotlinx/serialization/SerialDescriptor;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/serialization/SerialDescriptor;
public static final fun compiledSerializer (Lkotlin/reflect/KClass;)Lkotlinx/serialization/KSerializer;
public static final fun decode (Lkotlinx/serialization/Decoder;)Ljava/lang/Object;
public static final fun decode (Lkotlinx/serialization/Decoder;Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;
Expand Down Expand Up @@ -330,26 +335,6 @@ public final class kotlinx/serialization/SerialDescriptor$DefaultImpls {
public static fun isNullable (Lkotlinx/serialization/SerialDescriptor;)Z
}

public final class kotlinx/serialization/SerialDescriptorBuilder {
public final fun element (Ljava/lang/String;Lkotlinx/serialization/SerialDescriptor;Ljava/util/List;Z)V
public static synthetic fun element$default (Lkotlinx/serialization/SerialDescriptorBuilder;Ljava/lang/String;Lkotlinx/serialization/SerialDescriptor;Ljava/util/List;ZILjava/lang/Object;)V
public final fun getAnnotations ()Ljava/util/List;
public final fun getSerialName ()Ljava/lang/String;
public final fun isNullable ()Z
public final fun listDescriptor (Lkotlinx/serialization/SerialDescriptor;)Lkotlinx/serialization/SerialDescriptor;
public final fun mapDescriptor (Lkotlinx/serialization/SerialDescriptor;Lkotlinx/serialization/SerialDescriptor;)Lkotlinx/serialization/SerialDescriptor;
public final fun setAnnotations (Ljava/util/List;)V
public final fun setDescriptor (Lkotlinx/serialization/SerialDescriptor;)Lkotlinx/serialization/SerialDescriptor;
public final fun setNullable (Z)V
}

public final class kotlinx/serialization/SerialDescriptorBuilderKt {
public static final fun PrimitiveDescriptor (Ljava/lang/String;Lkotlinx/serialization/PrimitiveKind;)Lkotlinx/serialization/SerialDescriptor;
public static final fun SerialDescriptor (Ljava/lang/String;Lkotlinx/serialization/SerialKind;[Lkotlinx/serialization/SerialDescriptor;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/SerialDescriptor;
public static synthetic fun SerialDescriptor$default (Ljava/lang/String;Lkotlinx/serialization/SerialKind;[Lkotlinx/serialization/SerialDescriptor;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/serialization/SerialDescriptor;
public static final fun getNullable (Lkotlinx/serialization/SerialDescriptor;)Lkotlinx/serialization/SerialDescriptor;
}

public final class kotlinx/serialization/SerialDescriptorKt {
public static final fun elementDescriptors (Lkotlinx/serialization/SerialDescriptor;)Ljava/util/List;
public static final fun elementNames (Lkotlinx/serialization/SerialDescriptor;)Ljava/util/List;
Expand Down Expand Up @@ -519,6 +504,31 @@ public final class kotlinx/serialization/builtins/LongAsStringSerializer : kotli
public synthetic fun serialize (Lkotlinx/serialization/Encoder;Ljava/lang/Object;)V
}

public final class kotlinx/serialization/descriptors/ClassSerialDescriptorBuilder {
public final fun element (Ljava/lang/String;Lkotlinx/serialization/SerialDescriptor;Ljava/util/List;Z)V
public static synthetic fun element$default (Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;Ljava/lang/String;Lkotlinx/serialization/SerialDescriptor;Ljava/util/List;ZILjava/lang/Object;)V
public final fun getAnnotations ()Ljava/util/List;
public final fun getSerialName ()Ljava/lang/String;
public final fun isNullable ()Z
public final fun listDescriptor (Lkotlinx/serialization/SerialDescriptor;)Lkotlinx/serialization/SerialDescriptor;
public final fun mapDescriptor (Lkotlinx/serialization/SerialDescriptor;Lkotlinx/serialization/SerialDescriptor;)Lkotlinx/serialization/SerialDescriptor;
public final fun setAnnotations (Ljava/util/List;)V
public final fun setDescriptor (Lkotlinx/serialization/SerialDescriptor;)Lkotlinx/serialization/SerialDescriptor;
public final fun setNullable (Z)V
}

public final class kotlinx/serialization/descriptors/SerialDescriptorsKt {
public static final fun PrimitiveSerialDescriptor (Ljava/lang/String;Lkotlinx/serialization/PrimitiveKind;)Lkotlinx/serialization/SerialDescriptor;
public static final fun buildClassSerialDescriptor (Ljava/lang/String;[Lkotlinx/serialization/SerialDescriptor;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/SerialDescriptor;
public static synthetic fun buildClassSerialDescriptor$default (Ljava/lang/String;[Lkotlinx/serialization/SerialDescriptor;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/serialization/SerialDescriptor;
public static final fun buildSerialDescriptor (Ljava/lang/String;Lkotlinx/serialization/SerialKind;[Lkotlinx/serialization/SerialDescriptor;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/SerialDescriptor;
public static final fun getNullable (Lkotlinx/serialization/SerialDescriptor;)Lkotlinx/serialization/SerialDescriptor;
public static final fun listSerialDescriptor (Lkotlinx/serialization/SerialDescriptor;)Lkotlinx/serialization/SerialDescriptor;
public static final fun mapSerialDescriptor (Lkotlinx/serialization/SerialDescriptor;Lkotlinx/serialization/SerialDescriptor;)Lkotlinx/serialization/SerialDescriptor;
public static final fun serialDescriptor (Lkotlin/reflect/KType;)Lkotlinx/serialization/SerialDescriptor;
public static final fun setSerialDescriptor (Lkotlinx/serialization/SerialDescriptor;)Lkotlinx/serialization/SerialDescriptor;
}

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;
Expand Down Expand Up @@ -839,19 +849,6 @@ public final class kotlinx/serialization/internal/HashMapSerializer : kotlinx/se
public synthetic fun toResult (Ljava/lang/Object;)Ljava/lang/Object;
}

public final class kotlinx/serialization/internal/HashSetSerializer : kotlinx/serialization/internal/ListLikeSerializer {
public fun <init> (Lkotlinx/serialization/KSerializer;)V
public synthetic fun builder ()Ljava/lang/Object;
public synthetic fun builderSize (Ljava/lang/Object;)I
public synthetic fun checkCapacity (Ljava/lang/Object;I)V
public synthetic fun collectionIterator (Ljava/lang/Object;)Ljava/util/Iterator;
public synthetic fun collectionSize (Ljava/lang/Object;)I
public fun getDescriptor ()Lkotlinx/serialization/SerialDescriptor;
public synthetic fun insert (Ljava/lang/Object;ILjava/lang/Object;)V
public synthetic fun toBuilder (Ljava/lang/Object;)Ljava/lang/Object;
public synthetic fun toResult (Ljava/lang/Object;)Ljava/lang/Object;
}

public final class kotlinx/serialization/internal/HexConverter {
public static final field INSTANCE Lkotlinx/serialization/internal/HexConverter;
public final fun parseHexBinary (Ljava/lang/String;)[B
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

package kotlinx.serialization

import kotlinx.serialization.descriptors.*
import kotlinx.serialization.internal.*
import kotlinx.serialization.modules.*
import kotlin.reflect.*
Expand Down Expand Up @@ -31,7 +32,7 @@ public class ContextSerializer<T : Any>(
public constructor(serializableClass: KClass<T>) : this(serializableClass, null, EMPTY_SERIALIZER_ARRAY)

public override val descriptor: SerialDescriptor =
SerialDescriptor("kotlinx.serialization.ContextSerializer", UnionKind.CONTEXTUAL).withContext(serializableClass)
buildSerialDescriptor("kotlinx.serialization.ContextSerializer", UnionKind.CONTEXTUAL).withContext(serializableClass)

public override fun serialize(encoder: Encoder, value: T) {
val clz = value::class
Expand Down
30 changes: 30 additions & 0 deletions runtime/commonMain/src/kotlinx/serialization/Migrations.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
package kotlinx.serialization

import kotlinx.serialization.builtins.*
import kotlinx.serialization.descriptors.*
import kotlinx.serialization.encoding.*
import kotlinx.serialization.internal.*
import kotlinx.serialization.modules.*
Expand Down Expand Up @@ -270,3 +271,32 @@ public fun <T : Any?> Encoder.encode(strategy: SerializationStrategy<T>, value:
ReplaceWith("encodeSerializableValue<T>(serializer(), value)"), DeprecationLevel.ERROR
) // TODO make internal when migrations are removed
public fun <T : Any> Encoder.encode(obj: T): Unit = noImpl()

@Deprecated(
"This method was renamed to buildClassSerialDescriptor during serialization 1.0 API stabilization",
ReplaceWith("buildClassSerialDescriptor(serialName, *typeParameters, builderAction)"), DeprecationLevel.ERROR
)
public fun SerialDescriptor(
serialName: String,
vararg typeParameters: SerialDescriptor,
builderAction: ClassSerialDescriptorBuilder.() -> Unit = {}
): SerialDescriptor = noImpl()

@Deprecated(
"Builder with SerialKind was deprecated without replacement during serialization 1.0 API stabilization. " +
"It is possible to migrate to buildClassSerialDescriptor(...) for class-like structures." +
"Please file an issue with your use case if was using this builder",
level = DeprecationLevel.ERROR
)
public fun SerialDescriptor(
serialName: String,
kind: SerialKind,
vararg typeParameters: SerialDescriptor,
builderAction: ClassSerialDescriptorBuilder.() -> Unit = {}
): SerialDescriptor = noImpl()

@Deprecated(
"This method was renamed to PrimitiveSerialDescriptor during serialization 1.0 API stabilization",
ReplaceWith("PrimitiveSerialDescriptor(serialName, kind)"), DeprecationLevel.ERROR
)
public fun PrimitiveDescriptor(serialName: String, kind: PrimitiveKind): SerialDescriptor = noImpl()
5 changes: 3 additions & 2 deletions runtime/commonMain/src/kotlinx/serialization/Polymorphic.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
package kotlinx.serialization

import kotlinx.serialization.builtins.*
import kotlinx.serialization.descriptors.*
import kotlinx.serialization.internal.*
import kotlinx.serialization.modules.*
import kotlin.reflect.*
Expand Down Expand Up @@ -65,11 +66,11 @@ import kotlin.reflect.*
*/
public class PolymorphicSerializer<T : Any>(override val baseClass: KClass<T>) : AbstractPolymorphicSerializer<T>() {
public override val descriptor: SerialDescriptor =
SerialDescriptor("kotlinx.serialization.Polymorphic", PolymorphicKind.OPEN) {
buildSerialDescriptor("kotlinx.serialization.Polymorphic", PolymorphicKind.OPEN) {
element("type", String.serializer().descriptor)
element(
"value",
SerialDescriptor("kotlinx.serialization.Polymorphic<${baseClass.simpleName}>", UnionKind.CONTEXTUAL)
buildSerialDescriptor("kotlinx.serialization.Polymorphic<${baseClass.simpleName}>", UnionKind.CONTEXTUAL)
)
}.withContext(baseClass)
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
package kotlinx.serialization

import kotlinx.serialization.builtins.*
import kotlinx.serialization.descriptors.*
import kotlinx.serialization.internal.*
import kotlinx.serialization.modules.*
import kotlin.reflect.*
Expand Down Expand Up @@ -74,10 +75,10 @@ public class SealedClassSerializer<T : Any>(
subclassSerializers: Array<KSerializer<out T>>
) : AbstractPolymorphicSerializer<T>() {

override val descriptor: SerialDescriptor = SerialDescriptor(serialName, PolymorphicKind.SEALED) {
override val descriptor: SerialDescriptor = buildSerialDescriptor(serialName, PolymorphicKind.SEALED) {
element("type", String.serializer().descriptor)
val elementDescriptor =
SerialDescriptor("kotlinx.serialization.Sealed<${baseClass.simpleName}>", UnionKind.CONTEXTUAL) {
buildSerialDescriptor("kotlinx.serialization.Sealed<${baseClass.simpleName}>", UnionKind.CONTEXTUAL) {
subclassSerializers.forEach {
val d = it.descriptor
element(d.serialName, d)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ package kotlinx.serialization
* }
* ```
*
* For a classes that are represented as a single primitive value, [PrimitiveDescriptor] builder function can be used instead.
* For a classes that are represented as a single primitive value, [PrimitiveSerialDescriptor] builder function can be used instead.
*/
public interface SerialDescriptor {
/**
Expand Down
3 changes: 3 additions & 0 deletions runtime/commonMain/src/kotlinx/serialization/Serializers.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
package kotlinx.serialization

import kotlinx.serialization.builtins.*
import kotlinx.serialization.builtins.MapEntrySerializer
import kotlinx.serialization.builtins.TripleSerializer
import kotlinx.serialization.builtins.PairSerializer
import kotlinx.serialization.internal.*
import kotlin.jvm.*
import kotlin.reflect.*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
package kotlinx.serialization.builtins

import kotlinx.serialization.*
import kotlinx.serialization.descriptors.*


/**
Expand All @@ -16,7 +17,7 @@ import kotlinx.serialization.*
*/
public object LongAsStringSerializer : KSerializer<Long> {
override val descriptor: SerialDescriptor =
PrimitiveDescriptor("kotlinx.serialization.LongAsStringSerializer", PrimitiveKind.STRING)
PrimitiveSerialDescriptor("kotlinx.serialization.LongAsStringSerializer", PrimitiveKind.STRING)

override fun serialize(encoder: Encoder, value: Long) {
encoder.encodeString(value.toString())
Expand Down
Loading