• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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