Skip to content

Commit ab7879a

Browse files
committed
feat: add ZoneOffset codec and serializer; implement error handling for invalid ZoneOffsets
1 parent 4760068 commit ab7879a

File tree

4 files changed

+16
-2
lines changed

4 files changed

+16
-2
lines changed

surf-api-core/surf-api-core-api/src/main/kotlin/dev/slne/surf/surfapi/core/api/serializer/SurfCodecs.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import dev.slne.surf.surfapi.core.api.serializer.java.datetime.datetime.offset.O
1919
import dev.slne.surf.surfapi.core.api.serializer.java.datetime.datetime.zdt.ZonedDateTimeCodec
2020
import dev.slne.surf.surfapi.core.api.serializer.java.datetime.time.local.LocalTimeCodec
2121
import dev.slne.surf.surfapi.core.api.serializer.java.datetime.zone.id.ZoneIdCodec
22+
import dev.slne.surf.surfapi.core.api.serializer.java.datetime.zone.offset.ZoneOffsetCodec
2223
import dev.slne.surf.surfapi.core.api.serializer.java.uri.URICodec
2324
import dev.slne.surf.surfapi.core.api.serializer.java.uuid.JavaUUIDCodec
2425
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.matrix.m2d.SpongeMatrix2dCodec
@@ -103,5 +104,6 @@ object SurfCodecs {
103104
val ZONED_DATE_TIME = ZonedDateTimeCodec.CODEC
104105
val LOCAL_TIME = LocalTimeCodec.CODEC
105106
val ZONE_ID = ZoneIdCodec.CODEC
107+
val ZONE_OFFSET = ZoneOffsetCodec.CODEC
106108
// endregion
107109
}

surf-api-core/surf-api-core-api/src/main/kotlin/dev/slne/surf/surfapi/core/api/serializer/SurfSerializerModule.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import dev.slne.surf.surfapi.core.api.serializer.java.datetime.datetime.offset.O
2020
import dev.slne.surf.surfapi.core.api.serializer.java.datetime.datetime.zdt.ZonedDateTimeSerializer
2121
import dev.slne.surf.surfapi.core.api.serializer.java.datetime.time.local.LocalTimeSerializer
2222
import dev.slne.surf.surfapi.core.api.serializer.java.datetime.zone.id.ZonedIdSerializer
23+
import dev.slne.surf.surfapi.core.api.serializer.java.datetime.zone.offset.ZoneOffsetSerializer
2324
import dev.slne.surf.surfapi.core.api.serializer.java.uri.URISerializer
2425
import dev.slne.surf.surfapi.core.api.serializer.java.uuid.JavaUUIDSerializer
2526
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.matrix.m2d.SpongeMatrix2dSerializer
@@ -108,6 +109,7 @@ object SurfSerializerModule {
108109
contextual(ZonedDateTimeSerializer)
109110
contextual(LocalTimeSerializer)
110111
contextual(ZonedIdSerializer)
112+
contextual(ZoneOffsetSerializer)
111113
}
112114

113115
val all = SerializersModule {
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
package dev.slne.surf.surfapi.core.api.serializer.java.datetime.zone.offset
22

33
import com.mojang.serialization.Codec
4+
import com.mojang.serialization.DataResult
5+
import java.time.DateTimeException
46
import java.time.ZoneOffset
57

68
object ZoneOffsetCodec {
7-
val CODEC: Codec<ZoneOffset> = Codec.STRING.xmap({ ZoneOffset.of(it) }, { it.id })
9+
val CODEC: Codec<ZoneOffset> = Codec.STRING
10+
.comapFlatMap({ id ->
11+
try {
12+
DataResult.success(ZoneOffset.of(id))
13+
} catch (e: DateTimeException) {
14+
DataResult.error { "Invalid ZoneOffset $id: ${e.message}" }
15+
}
16+
17+
}, ZoneOffset::getId)
818
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,6 @@ object ZoneOffsetSerializer : KSerializer<ZoneOffset> {
2323
encoder.encodeString(value.id)
2424
}
2525

26-
override fun deserialize(decoder: Decoder) =
26+
override fun deserialize(decoder: Decoder): ZoneOffset =
2727
ZoneOffset.of(decoder.decodeString())
2828
}

0 commit comments

Comments
 (0)