Skip to content

Commit 6869122

Browse files
dkhalanskyjbSpace Team
authored and
Space Team
committed
Add the serializer for kotlin.time.Instant to the list of standard serializers
After moving `Instant` from `kotlinx.datetime` to `kotlin.time`, we also need to preserve it having a default `kotlinx.serialization` serializer. See Kotlin/KEEP#387 The corresponding request in `kotlinx.serialization`: Kotlin/kotlinx.serialization#2945 Additionally, fix a test that was not being run correctly. Merge-request: KT-MR-20493 Merged-by: Dmitry Khalanskiy <[email protected]>
1 parent 35162db commit 6869122

File tree

9 files changed

+81
-2
lines changed

9 files changed

+81
-2
lines changed

plugins/kotlinx-serialization/kotlinx-serialization.common/src/org/jetbrains/kotlinx/serialization/compiler/resolve/NamingConventions.kt

+1
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@ fun findStandardKotlinTypeSerializerName(typeName: String?): String? {
252252
"kotlin.DoubleArray" -> "DoubleArraySerializer"
253253
"kotlin.BooleanArray" -> "BooleanArraySerializer"
254254
"kotlin.time.Duration" -> "DurationSerializer"
255+
"kotlin.time.Instant" -> "InstantSerializer"
255256
"kotlin.uuid.Uuid" -> "UuidSerializer"
256257
"java.lang.Boolean" -> "BooleanSerializer"
257258
"java.lang.Byte" -> "ByteSerializer"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// WITH_STDLIB
2+
// API_VERSION: LATEST
3+
// OPT_IN: kotlin.time.ExperimentalTime
4+
5+
// FILE: serializer.kt
6+
7+
package kotlinx.serialization.internal
8+
9+
import kotlin.time.*
10+
import kotlinx.serialization.*
11+
import kotlinx.serialization.encoding.*
12+
import kotlinx.serialization.descriptors.*
13+
14+
// TODO: delete when serialization runtime is updated to 1.9.0
15+
internal object InstantSerializer : KSerializer<Instant> {
16+
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("kotlin.time.Instant", PrimitiveKind.STRING)
17+
18+
override fun serialize(encoder: Encoder, value: Instant) {
19+
encoder.encodeString(value.toString())
20+
}
21+
22+
override fun deserialize(decoder: Decoder): Instant {
23+
return Instant.parse(decoder.decodeString())
24+
}
25+
}
26+
27+
// FILE: test.kt
28+
29+
package a
30+
31+
import kotlin.time.*
32+
import kotlinx.serialization.*
33+
import kotlinx.serialization.json.*
34+
35+
@Serializable
36+
class Holder(val i: Instant)
37+
38+
fun box(): String {
39+
val h = Holder(Instant.parse("2025-01-04T23:59:14.0001242Z"))
40+
val msg = Json.encodeToString(h)
41+
return if (msg == """{"i":"2025-01-04T23:59:14.000124200Z"}""") "OK" else "FAIL: $msg"
42+
}
43+

plugins/kotlinx-serialization/testData/boxIr/uuidSerializer.kt

+1-2
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,8 @@ import kotlinx.serialization.json.*
3838
class Holder(val u: Uuid)
3939

4040
fun box(): String {
41-
return "OK"
4241
val h = Holder(Uuid.parse("bc501c76-d806-4578-b45e-97a264e280f1"))
4342
val msg = Json.encodeToString(h)
44-
return if (msg == """{"uuid":"bc501c76-d806-4578-b45e-97a264e280f1"}""") "OK" else "FAIL: $msg"
43+
return if (msg == """{"u":"bc501c76-d806-4578-b45e-97a264e280f1"}""") "OK" else "FAIL: $msg"
4544
}
4645

plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/LLReversedSerializationBlackBoxTestGenerated.java

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/LLSerializationBlackBoxTestGenerated.java

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirJsBoxTestGenerated.java

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirLightTreeBlackBoxTestGenerated.java

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrBoxTestGenerated.java

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrJsBoxTestGenerated.java

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)