1 /* 2 * Copyright 2017-2022 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. 3 */ 4 package kotlinx.serialization.internal 5 6 import kotlinx.serialization.KSerializer 7 import kotlinx.serialization.SerializationException 8 import kotlinx.serialization.descriptors.PrimitiveKind 9 import kotlinx.serialization.descriptors.SerialDescriptor 10 import kotlinx.serialization.encoding.Decoder 11 import kotlinx.serialization.encoding.Encoder 12 import kotlin.time.Duration 13 14 15 @PublishedApi 16 internal object DurationSerializer : KSerializer<Duration> { 17 override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("kotlin.time.Duration", PrimitiveKind.STRING) 18 serializenull19 override fun serialize(encoder: Encoder, value: Duration) { 20 encoder.encodeString(value.toIsoString()) 21 } 22 deserializenull23 override fun deserialize(decoder: Decoder): Duration { 24 return Duration.parseIsoString(decoder.decodeString()) 25 } 26 } 27 28 @PublishedApi 29 internal object NothingSerializer : KSerializer<Nothing> { 30 override val descriptor: SerialDescriptor = NothingSerialDescriptor 31 serializenull32 override fun serialize(encoder: Encoder, value: Nothing) { 33 throw SerializationException("'kotlin.Nothing' cannot be serialized") 34 } 35 deserializenull36 override fun deserialize(decoder: Decoder): Nothing { 37 throw SerializationException("'kotlin.Nothing' does not have instances") 38 } 39 } 40