Refactor source layout
Introduce compat source sets and move all kotlin sources to the main directory [no changelog]
This commit is contained in:
25
src/main/kotlin/util/json/BlockPosSerializer.kt
Normal file
25
src/main/kotlin/util/json/BlockPosSerializer.kt
Normal file
@@ -0,0 +1,25 @@
|
||||
package moe.nea.firmament.util.json
|
||||
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
import kotlinx.serialization.serializer
|
||||
import net.minecraft.util.math.BlockPos
|
||||
|
||||
object BlockPosSerializer : KSerializer<BlockPos> {
|
||||
val delegate = serializer<List<Int>>()
|
||||
|
||||
override val descriptor: SerialDescriptor
|
||||
get() = SerialDescriptor("BlockPos", delegate.descriptor)
|
||||
|
||||
override fun deserialize(decoder: Decoder): BlockPos {
|
||||
val list = decoder.decodeSerializableValue(delegate)
|
||||
require(list.size == 3)
|
||||
return BlockPos(list[0], list[1], list[2])
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, value: BlockPos) {
|
||||
encoder.encodeSerializableValue(delegate, listOf(value.x, value.y, value.z))
|
||||
}
|
||||
}
|
||||
29
src/main/kotlin/util/json/DashlessUUIDSerializer.kt
Normal file
29
src/main/kotlin/util/json/DashlessUUIDSerializer.kt
Normal file
@@ -0,0 +1,29 @@
|
||||
|
||||
|
||||
package moe.nea.firmament.util.json
|
||||
|
||||
import java.util.UUID
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.descriptors.PrimitiveKind
|
||||
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
import moe.nea.firmament.util.parseDashlessUUID
|
||||
|
||||
object DashlessUUIDSerializer : KSerializer<UUID> {
|
||||
override val descriptor: SerialDescriptor =
|
||||
PrimitiveSerialDescriptor("DashlessUUIDSerializer", PrimitiveKind.STRING)
|
||||
|
||||
override fun deserialize(decoder: Decoder): UUID {
|
||||
val str = decoder.decodeString()
|
||||
if ("-" in str) {
|
||||
return UUID.fromString(str)
|
||||
}
|
||||
return parseDashlessUUID(str)
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, value: UUID) {
|
||||
encoder.encodeString(value.toString().replace("-", ""))
|
||||
}
|
||||
}
|
||||
22
src/main/kotlin/util/json/InstantAsLongSerializer.kt
Normal file
22
src/main/kotlin/util/json/InstantAsLongSerializer.kt
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
|
||||
package moe.nea.firmament.util.json
|
||||
|
||||
import kotlinx.datetime.Instant
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.descriptors.PrimitiveKind
|
||||
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
|
||||
object InstantAsLongSerializer : KSerializer<Instant> {
|
||||
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("InstantAsLongSerializer", PrimitiveKind.LONG)
|
||||
override fun deserialize(decoder: Decoder): Instant {
|
||||
return Instant.fromEpochMilliseconds(decoder.decodeLong())
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, value: Instant) {
|
||||
encoder.encodeLong(value.toEpochMilliseconds())
|
||||
}
|
||||
}
|
||||
31
src/main/kotlin/util/json/SingletonSerializableList.kt
Normal file
31
src/main/kotlin/util/json/SingletonSerializableList.kt
Normal file
@@ -0,0 +1,31 @@
|
||||
|
||||
package moe.nea.firmament.util.json
|
||||
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.builtins.ListSerializer
|
||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
import kotlinx.serialization.json.JsonArray
|
||||
import kotlinx.serialization.json.JsonDecoder
|
||||
import kotlinx.serialization.json.JsonElement
|
||||
|
||||
class SingletonSerializableList<T>(val child: KSerializer<T>) : KSerializer<List<T>> {
|
||||
override val descriptor: SerialDescriptor
|
||||
get() = JsonElement.serializer().descriptor
|
||||
|
||||
override fun deserialize(decoder: Decoder): List<T> {
|
||||
decoder as JsonDecoder
|
||||
val list = JsonElement.serializer().deserialize(decoder)
|
||||
if (list is JsonArray) {
|
||||
return list.map {
|
||||
decoder.json.decodeFromJsonElement(child, it)
|
||||
}
|
||||
}
|
||||
return listOf(decoder.json.decodeFromJsonElement(child, list))
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, value: List<T>) {
|
||||
ListSerializer(child).serialize(encoder, value)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user