blob: 9ea08ad9cc6e8868f1da3236958b9c2a7d979dcc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package util.json
import com.mojang.serialization.Codec
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.json.JsonElement
import moe.nea.firmament.util.json.KJsonOps
abstract class CodecSerializer<T>(val codec: Codec<T>) : KSerializer<T> {
override val descriptor: SerialDescriptor
get() = JsonElement.serializer().descriptor
override fun serialize(encoder: Encoder, value: T) {
encoder.encodeSerializableValue(
JsonElement.serializer(),
codec.encodeStart(KJsonOps.INSTANCE, value).orThrow
)
}
override fun deserialize(decoder: Decoder): T {
return codec.decode(KJsonOps.INSTANCE, decoder.decodeSerializableValue(JsonElement.serializer()))
.orThrow.first
}
}
|