Skip to content

Commit 351e776

Browse files
committed
feat: simplify OffsetDateTime serialization using ISO_DATE_TIME formatter
- Replaced custom serialization logic with standard ISO_DATE_TIME formatting. - Improved code readability and reduced complexity in serializer implementation.
1 parent db8b4b8 commit 351e776

File tree

2 files changed

+8
-29
lines changed

2 files changed

+8
-29
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled
77
javaVersion=21
88
mcVersion=1.21.11
99
group=dev.slne.surf
10-
version=1.21.11-2.49.0
10+
version=1.21.11-2.49.1
1111
relocationPrefix=dev.slne.surf.surfapi.libs
1212
snapshot=false

surf-api-core/surf-api-core-api/src/main/kotlin/dev/slne/surf/surfapi/core/api/serializer/java/datetime/datetime/offset/OffsetDateTimeSerializer.kt

Lines changed: 7 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ import kotlinx.serialization.ExperimentalSerializationApi
88
import kotlinx.serialization.KSerializer
99
import kotlinx.serialization.Serializable
1010
import kotlinx.serialization.descriptors.buildClassSerialDescriptor
11-
import kotlinx.serialization.encoding.*
12-
import java.time.LocalDateTime
11+
import kotlinx.serialization.encoding.Decoder
12+
import kotlinx.serialization.encoding.Encoder
1313
import java.time.OffsetDateTime
14-
import java.time.ZoneOffset
14+
import java.time.format.DateTimeFormatter
1515

1616
typealias SerializableOffsetDateTime = @Serializable(with = OffsetDateTimeSerializer::class) OffsetDateTime
1717

@@ -25,34 +25,13 @@ object OffsetDateTimeSerializer : KSerializer<OffsetDateTime> {
2525
override fun serialize(
2626
encoder: Encoder,
2727
value: OffsetDateTime,
28-
) = encoder.encodeStructure(descriptor) {
29-
encodeSerializableElement(descriptor, 0, ZoneOffsetSerializer, value.offset)
30-
encodeSerializableElement(descriptor, 1, LocalDateTimeSerializer, value.toLocalDateTime())
28+
) {
29+
encoder.encodeString(DateTimeFormatter.ISO_DATE_TIME.format(value))
3130
}
3231

3332
override fun deserialize(
3433
decoder: Decoder,
35-
): OffsetDateTime = decoder.decodeStructure(descriptor) {
36-
var offset: ZoneOffset? = null
37-
var localDateTime: LocalDateTime? = null
38-
39-
if (decodeSequentially()) {
40-
offset = decodeSerializableElement(descriptor, 0, ZoneOffsetSerializer)
41-
localDateTime = decodeSerializableElement(descriptor, 1, LocalDateTimeSerializer)
42-
} else while (true) {
43-
when (val index = decodeElementIndex(descriptor)) {
44-
0 -> offset = decodeSerializableElement(descriptor, 0, ZoneOffsetSerializer)
45-
1 -> localDateTime =
46-
decodeSerializableElement(descriptor, 1, LocalDateTimeSerializer)
47-
48-
CompositeDecoder.DECODE_DONE -> break
49-
else -> error("Unexpected index: $index")
50-
}
51-
}
52-
53-
require(offset != null) { "Missing value for offset" }
54-
require(localDateTime != null) { "Missing value for localDateTime" }
55-
56-
OffsetDateTime.of(localDateTime, offset)
34+
): OffsetDateTime {
35+
return OffsetDateTime.parse(decoder.decodeString(), DateTimeFormatter.ISO_DATE_TIME)
5736
}
5837
}

0 commit comments

Comments
 (0)