Skip to content

Commit 4760068

Browse files
committed
feat: add ZoneId codec and serializer; implement error handling for invalid ZoneIDs
1 parent bb64712 commit 4760068

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
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
@@ -18,6 +18,7 @@ import dev.slne.surf.surfapi.core.api.serializer.java.datetime.datetime.ldt.Loca
1818
import dev.slne.surf.surfapi.core.api.serializer.java.datetime.datetime.offset.OffsetDateTimeCodec
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
21+
import dev.slne.surf.surfapi.core.api.serializer.java.datetime.zone.id.ZoneIdCodec
2122
import dev.slne.surf.surfapi.core.api.serializer.java.uri.URICodec
2223
import dev.slne.surf.surfapi.core.api.serializer.java.uuid.JavaUUIDCodec
2324
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.matrix.m2d.SpongeMatrix2dCodec
@@ -101,5 +102,6 @@ object SurfCodecs {
101102
val OFFSET_DATE_TIME = OffsetDateTimeCodec.CODEC
102103
val ZONED_DATE_TIME = ZonedDateTimeCodec.CODEC
103104
val LOCAL_TIME = LocalTimeCodec.CODEC
105+
val ZONE_ID = ZoneIdCodec.CODEC
104106
// endregion
105107
}

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
@@ -19,6 +19,7 @@ import dev.slne.surf.surfapi.core.api.serializer.java.datetime.datetime.ldt.Loca
1919
import dev.slne.surf.surfapi.core.api.serializer.java.datetime.datetime.offset.OffsetDateTimeSerializer
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
22+
import dev.slne.surf.surfapi.core.api.serializer.java.datetime.zone.id.ZonedIdSerializer
2223
import dev.slne.surf.surfapi.core.api.serializer.java.uri.URISerializer
2324
import dev.slne.surf.surfapi.core.api.serializer.java.uuid.JavaUUIDSerializer
2425
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.matrix.m2d.SpongeMatrix2dSerializer
@@ -106,6 +107,7 @@ object SurfSerializerModule {
106107
contextual(OffsetDateTimeSerializer)
107108
contextual(ZonedDateTimeSerializer)
108109
contextual(LocalTimeSerializer)
110+
contextual(ZonedIdSerializer)
109111
}
110112

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

33
import com.mojang.serialization.Codec
4+
import com.mojang.serialization.DataResult
5+
import java.time.DateTimeException
46
import java.time.ZoneId
7+
import java.time.zone.ZoneRulesException
58

69
object ZoneIdCodec {
7-
val CODEC: Codec<ZoneId> = Codec.STRING.xmap({ ZoneId.of(it) }, { it.id })
10+
val CODEC: Codec<ZoneId> = Codec.STRING
11+
.comapFlatMap({ id ->
12+
try {
13+
DataResult.success(ZoneId.of(id))
14+
} catch (e: ZoneRulesException) {
15+
DataResult.error { "Unknown ZoneID $id: ${e.message}" }
16+
} catch (e: DateTimeException) {
17+
DataResult.error { "Invalid ZoneID $id: ${e.message}" }
18+
}
19+
}, ZoneId::getId)
820
}

0 commit comments

Comments
 (0)