/* * 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.* import kotlinx.serialization.descriptors.* import kotlin.time.Duration /** * Returns a nullable serializer for the given serializer of non-null type. */ @OptIn(ExperimentalSerializationApi::class) public val KSerializer.nullable: KSerializer get() { @Suppress("UNCHECKED_CAST") return if (descriptor.isNullable) (this as KSerializer) else NullableSerializer(this) } /** * Returns built-in serializer for Kotlin [Pair]. * Resulting serializer represents pair as a structure of two key-value pairs. */ public fun PairSerializer( keySerializer: KSerializer, valueSerializer: KSerializer ): KSerializer> = kotlinx.serialization.internal.PairSerializer(keySerializer, valueSerializer) /** * Returns built-in serializer for [Map.Entry]. * Resulting serializer represents entry as a structure with a single key-value pair. * E.g. `Pair(1, 2)` and `Map.Entry(1, 2)` will be serialized to JSON as * `{"first": 1, "second": 2}` and `{"1": 2}` respectively. */ public fun MapEntrySerializer( keySerializer: KSerializer, valueSerializer: KSerializer ): KSerializer> = kotlinx.serialization.internal.MapEntrySerializer(keySerializer, valueSerializer) /** * Returns built-in serializer for Kotlin [Triple]. * Resulting serializer represents triple as a structure of three key-value pairs. */ public fun TripleSerializer( aSerializer: KSerializer, bSerializer: KSerializer, cSerializer: KSerializer ): KSerializer> = kotlinx.serialization.internal.TripleSerializer(aSerializer, bSerializer, cSerializer) /** * Returns serializer for [Char] with [descriptor][SerialDescriptor] of [PrimitiveKind.CHAR] kind. */ public fun Char.Companion.serializer(): KSerializer = 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 = CharArraySerializer /** * Returns serializer for [Byte] with [descriptor][SerialDescriptor] of [PrimitiveKind.BYTE] kind. */ public fun Byte.Companion.serializer(): KSerializer = 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 = ByteArraySerializer /** * Returns serializer for [UByteArray] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. * Each element of the array is serialized one by one with [UByte.Companion.serializer]. */ @ExperimentalSerializationApi @ExperimentalUnsignedTypes public fun UByteArraySerializer(): KSerializer = UByteArraySerializer /** * Returns serializer for [Short] with [descriptor][SerialDescriptor] of [PrimitiveKind.SHORT] kind. */ public fun Short.Companion.serializer(): KSerializer = 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 = ShortArraySerializer /** * Returns serializer for [UShortArray] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. * Each element of the array is serialized one by one with [UShort.Companion.serializer]. */ @ExperimentalSerializationApi @ExperimentalUnsignedTypes public fun UShortArraySerializer(): KSerializer = UShortArraySerializer /** * Returns serializer for [Int] with [descriptor][SerialDescriptor] of [PrimitiveKind.INT] kind. */ public fun Int.Companion.serializer(): KSerializer = 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 = IntArraySerializer /** * Returns serializer for [UIntArray] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. * Each element of the array is serialized one by one with [UInt.Companion.serializer]. */ @ExperimentalSerializationApi @ExperimentalUnsignedTypes public fun UIntArraySerializer(): KSerializer = UIntArraySerializer /** * Returns serializer for [Long] with [descriptor][SerialDescriptor] of [PrimitiveKind.LONG] kind. */ public fun Long.Companion.serializer(): KSerializer = 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 = LongArraySerializer /** * Returns serializer for [ULongArray] with [descriptor][SerialDescriptor] of [StructureKind.LIST] kind. * Each element of the array is serialized one by one with [ULong.Companion.serializer]. */ @ExperimentalSerializationApi @ExperimentalUnsignedTypes public fun ULongArraySerializer(): KSerializer = ULongArraySerializer /** * Returns serializer for [Float] with [descriptor][SerialDescriptor] of [PrimitiveKind.FLOAT] kind. */ public fun Float.Companion.serializer(): KSerializer = 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 = FloatArraySerializer /** * Returns serializer for [Double] with [descriptor][SerialDescriptor] of [PrimitiveKind.DOUBLE] kind. */ public fun Double.Companion.serializer(): KSerializer = 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 = DoubleArraySerializer /** * Returns serializer for [Boolean] with [descriptor][SerialDescriptor] of [PrimitiveKind.BOOLEAN] kind. */ public fun Boolean.Companion.serializer(): KSerializer = 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 = BooleanArraySerializer /** * Returns serializer for [Unit] with [descriptor][SerialDescriptor] of [StructureKind.OBJECT] kind. */ @Suppress("unused") public fun Unit.serializer(): KSerializer = UnitSerializer /** * Returns serializer for [String] with [descriptor][SerialDescriptor] of [PrimitiveKind.STRING] kind. */ public fun String.Companion.serializer(): KSerializer = 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") @ExperimentalSerializationApi public inline fun ArraySerializer(elementSerializer: KSerializer): KSerializer> = ArraySerializer(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]. */ @ExperimentalSerializationApi public fun ArraySerializer( kClass: KClass, elementSerializer: KSerializer ): KSerializer> = ReferenceArraySerializer(kClass, elementSerializer) /** * Creates a serializer for [`List`][List] for the given serializer of type [T]. */ public fun ListSerializer(elementSerializer: KSerializer): KSerializer> = ArrayListSerializer(elementSerializer) /** * Creates a serializer for [`Set`][Set] for the given serializer of type [T]. */ public fun SetSerializer(elementSerializer: KSerializer): KSerializer> = LinkedHashSetSerializer(elementSerializer) /** * Creates a serializer for [`Map`][Map] for the given serializers for * its ket type [K] and value type [V]. */ public fun MapSerializer( keySerializer: KSerializer, valueSerializer: KSerializer ): KSerializer> = LinkedHashMapSerializer(keySerializer, valueSerializer) /** * Returns serializer for [UInt]. */ public fun UInt.Companion.serializer(): KSerializer = UIntSerializer /** * Returns serializer for [ULong]. */ public fun ULong.Companion.serializer(): KSerializer = ULongSerializer /** * Returns serializer for [UByte]. */ public fun UByte.Companion.serializer(): KSerializer = UByteSerializer /** * Returns serializer for [UShort]. */ public fun UShort.Companion.serializer(): KSerializer = UShortSerializer /** * Returns serializer for [Duration]. * It is serialized as a string that represents a duration in the ISO-8601-2 format. * * The result of serialization is similar to calling [Duration.toIsoString], for deserialization is [Duration.parseIsoString]. */ public fun Duration.Companion.serializer(): KSerializer = DurationSerializer /** * Returns serializer for [Nothing]. * Throws an exception when trying to encode or decode. * * It is used as a dummy in case it is necessary to pass a type to a parameterized class. At the same time, it is expected that this generic type will not participate in serialization. */ @ExperimentalSerializationApi public fun NothingSerializer(): KSerializer = NothingSerializer