summaryrefslogtreecommitdiff
path: root/core/commonMain/src/kotlinx/serialization/internal/BuiltInSerializers.kt
diff options
context:
space:
mode:
Diffstat (limited to 'core/commonMain/src/kotlinx/serialization/internal/BuiltInSerializers.kt')
-rw-r--r--core/commonMain/src/kotlinx/serialization/internal/BuiltInSerializers.kt39
1 files changed, 39 insertions, 0 deletions
diff --git a/core/commonMain/src/kotlinx/serialization/internal/BuiltInSerializers.kt b/core/commonMain/src/kotlinx/serialization/internal/BuiltInSerializers.kt
new file mode 100644
index 00000000..2e64a770
--- /dev/null
+++ b/core/commonMain/src/kotlinx/serialization/internal/BuiltInSerializers.kt
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2017-2022 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+package kotlinx.serialization.internal
+
+import kotlinx.serialization.KSerializer
+import kotlinx.serialization.SerializationException
+import kotlinx.serialization.descriptors.PrimitiveKind
+import kotlinx.serialization.descriptors.SerialDescriptor
+import kotlinx.serialization.encoding.Decoder
+import kotlinx.serialization.encoding.Encoder
+import kotlin.time.Duration
+
+
+@PublishedApi
+internal object DurationSerializer : KSerializer<Duration> {
+ override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("kotlin.time.Duration", PrimitiveKind.STRING)
+
+ override fun serialize(encoder: Encoder, value: Duration) {
+ encoder.encodeString(value.toIsoString())
+ }
+
+ override fun deserialize(decoder: Decoder): Duration {
+ return Duration.parseIsoString(decoder.decodeString())
+ }
+}
+
+@PublishedApi
+internal object NothingSerializer : KSerializer<Nothing> {
+ override val descriptor: SerialDescriptor = NothingSerialDescriptor
+
+ override fun serialize(encoder: Encoder, value: Nothing) {
+ throw SerializationException("'kotlin.Nothing' cannot be serialized")
+ }
+
+ override fun deserialize(decoder: Decoder): Nothing {
+ throw SerializationException("'kotlin.Nothing' does not have instances")
+ }
+}