summaryrefslogtreecommitdiff
path: root/core/commonMain/src/kotlinx/serialization/builtins/BuiltinSerializers.kt
diff options
context:
space:
mode:
Diffstat (limited to 'core/commonMain/src/kotlinx/serialization/builtins/BuiltinSerializers.kt')
-rw-r--r--core/commonMain/src/kotlinx/serialization/builtins/BuiltinSerializers.kt60
1 files changed, 51 insertions, 9 deletions
diff --git a/core/commonMain/src/kotlinx/serialization/builtins/BuiltinSerializers.kt b/core/commonMain/src/kotlinx/serialization/builtins/BuiltinSerializers.kt
index 147f25d9..4bd81012 100644
--- a/core/commonMain/src/kotlinx/serialization/builtins/BuiltinSerializers.kt
+++ b/core/commonMain/src/kotlinx/serialization/builtins/BuiltinSerializers.kt
@@ -9,6 +9,7 @@ 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.
@@ -33,7 +34,7 @@ public fun <K, V> PairSerializer(
* 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.
+ * `{"first": 1, "second": 2}` and `{"1": 2}` respectively.
*/
public fun <K, V> MapEntrySerializer(
keySerializer: KSerializer<K>,
@@ -74,6 +75,14 @@ public fun Byte.Companion.serializer(): KSerializer<Byte> = ByteSerializer
public fun ByteArraySerializer(): KSerializer<ByteArray> = 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<UByteArray> = UByteArraySerializer
+
+/**
* Returns serializer for [Short] with [descriptor][SerialDescriptor] of [PrimitiveKind.SHORT] kind.
*/
public fun Short.Companion.serializer(): KSerializer<Short> = ShortSerializer
@@ -85,6 +94,14 @@ public fun Short.Companion.serializer(): KSerializer<Short> = ShortSerializer
public fun ShortArraySerializer(): KSerializer<ShortArray> = 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<UShortArray> = UShortArraySerializer
+
+/**
* Returns serializer for [Int] with [descriptor][SerialDescriptor] of [PrimitiveKind.INT] kind.
*/
public fun Int.Companion.serializer(): KSerializer<Int> = IntSerializer
@@ -96,6 +113,14 @@ public fun Int.Companion.serializer(): KSerializer<Int> = IntSerializer
public fun IntArraySerializer(): KSerializer<IntArray> = 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<UIntArray> = UIntArraySerializer
+
+/**
* Returns serializer for [Long] with [descriptor][SerialDescriptor] of [PrimitiveKind.LONG] kind.
*/
public fun Long.Companion.serializer(): KSerializer<Long> = LongSerializer
@@ -107,6 +132,14 @@ public fun Long.Companion.serializer(): KSerializer<Long> = LongSerializer
public fun LongArraySerializer(): KSerializer<LongArray> = 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<ULongArray> = ULongArraySerializer
+
+/**
* Returns serializer for [Float] with [descriptor][SerialDescriptor] of [PrimitiveKind.FLOAT] kind.
*/
public fun Float.Companion.serializer(): KSerializer<Float> = FloatSerializer
@@ -193,27 +226,36 @@ public fun <K, V> MapSerializer(
/**
* Returns serializer for [UInt].
*/
-@ExperimentalSerializationApi
-@ExperimentalUnsignedTypes
public fun UInt.Companion.serializer(): KSerializer<UInt> = UIntSerializer
/**
* Returns serializer for [ULong].
*/
-@ExperimentalSerializationApi
-@ExperimentalUnsignedTypes
public fun ULong.Companion.serializer(): KSerializer<ULong> = ULongSerializer
/**
* Returns serializer for [UByte].
*/
-@ExperimentalSerializationApi
-@ExperimentalUnsignedTypes
public fun UByte.Companion.serializer(): KSerializer<UByte> = UByteSerializer
/**
* Returns serializer for [UShort].
*/
-@ExperimentalSerializationApi
-@ExperimentalUnsignedTypes
public fun UShort.Companion.serializer(): KSerializer<UShort> = 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<Duration> = 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<Nothing> = NothingSerializer