Skip to content

Commit bb64712

Browse files
committed
feat: add LocalTime codec and serializer; integrate into SurfCodecs and SurfSerializerModule
1 parent 1b67765 commit bb64712

File tree

3 files changed

+14
-2
lines changed

3 files changed

+14
-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
@@ -17,6 +17,7 @@ import dev.slne.surf.surfapi.core.api.serializer.java.datetime.datetime.instant.
1717
import dev.slne.surf.surfapi.core.api.serializer.java.datetime.datetime.ldt.LocalDateTimeCodec
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
20+
import dev.slne.surf.surfapi.core.api.serializer.java.datetime.time.local.LocalTimeCodec
2021
import dev.slne.surf.surfapi.core.api.serializer.java.uri.URICodec
2122
import dev.slne.surf.surfapi.core.api.serializer.java.uuid.JavaUUIDCodec
2223
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.matrix.m2d.SpongeMatrix2dCodec
@@ -99,5 +100,6 @@ object SurfCodecs {
99100
val LOCAL_DATE_TIME = LocalDateTimeCodec.CODEC
100101
val OFFSET_DATE_TIME = OffsetDateTimeCodec.CODEC
101102
val ZONED_DATE_TIME = ZonedDateTimeCodec.CODEC
103+
val LOCAL_TIME = LocalTimeCodec.CODEC
102104
// endregion
103105
}

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
@@ -18,6 +18,7 @@ import dev.slne.surf.surfapi.core.api.serializer.java.datetime.datetime.instant.
1818
import dev.slne.surf.surfapi.core.api.serializer.java.datetime.datetime.ldt.LocalDateTimeSerializer
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
21+
import dev.slne.surf.surfapi.core.api.serializer.java.datetime.time.local.LocalTimeSerializer
2122
import dev.slne.surf.surfapi.core.api.serializer.java.uri.URISerializer
2223
import dev.slne.surf.surfapi.core.api.serializer.java.uuid.JavaUUIDSerializer
2324
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.matrix.m2d.SpongeMatrix2dSerializer
@@ -104,6 +105,7 @@ object SurfSerializerModule {
104105
contextual(LocalDateTimeSerializer)
105106
contextual(OffsetDateTimeSerializer)
106107
contextual(ZonedDateTimeSerializer)
108+
contextual(LocalTimeSerializer)
107109
}
108110

109111
val all = SerializersModule {
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
package dev.slne.surf.surfapi.core.api.serializer.java.datetime.time.local
22

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

68
object LocalTimeCodec {
7-
val CODEC: Codec<LocalTime> =
8-
Codec.LONG.xmap({ LocalTime.ofNanoOfDay(it) }, { it.toNanoOfDay() })
9+
val CODEC: Codec<LocalTime> = Codec.LONG
10+
.comapFlatMap({ nanoOfDay ->
11+
try {
12+
DataResult.success(LocalTime.ofNanoOfDay(nanoOfDay))
13+
} catch (e: DateTimeException) {
14+
DataResult.error { "Invalid time $nanoOfDay: ${e.message}" }
15+
}
16+
}, LocalTime::toNanoOfDay)
917
}

0 commit comments

Comments
 (0)