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 import kotlin.uuid.* 14 15 16 @PublishedApi 17 internal object DurationSerializer : KSerializer<Duration> { 18 override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("kotlin.time.Duration", PrimitiveKind.STRING) 19 serializenull20 override fun serialize(encoder: Encoder, value: Duration) { 21 encoder.encodeString(value.toIsoString()) 22 } 23 deserializenull24 override fun deserialize(decoder: Decoder): Duration { 25 return Duration.parseIsoString(decoder.decodeString()) 26 } 27 } 28 29 @PublishedApi 30 internal object NothingSerializer : KSerializer<Nothing> { 31 override val descriptor: SerialDescriptor = NothingSerialDescriptor 32 serializenull33 override fun serialize(encoder: Encoder, value: Nothing) { 34 throw SerializationException("'kotlin.Nothing' cannot be serialized") 35 } 36 deserializenull37 override fun deserialize(decoder: Decoder): Nothing { 38 throw SerializationException("'kotlin.Nothing' does not have instances") 39 } 40 } 41 42 @PublishedApi 43 @ExperimentalUuidApi 44 internal object UuidSerializer: KSerializer<Uuid> { 45 override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("kotlin.uuid.Uuid", PrimitiveKind.STRING) 46 serializenull47 override fun serialize(encoder: Encoder, value: Uuid) { 48 encoder.encodeString(value.toString()) 49 } 50 deserializenull51 override fun deserialize(decoder: Decoder): Uuid { 52 return Uuid.parse(decoder.decodeString()) 53 } 54 } 55