Refactor source layout

Introduce compat source sets and move all kotlin sources to the main directory

[no changelog]
This commit is contained in:
Linnea Gräf
2024-08-28 19:04:24 +02:00
parent a690630816
commit d2f240ff0c
251 changed files with 295 additions and 38 deletions

View 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))
}
}

View 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("-", ""))
}
}

View 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())
}
}

View 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)
}
}