KOptional codec

This commit is contained in:
DBotThePony 2025-03-01 12:11:53 +07:00
parent d2ff43946e
commit 454783a99a
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -0,0 +1,21 @@
package ru.dbotthepony.mc.otm.data.codec
import com.mojang.datafixers.util.Pair
import com.mojang.serialization.Codec
import com.mojang.serialization.DataResult
import com.mojang.serialization.DynamicOps
import ru.dbotthepony.kommons.util.KOptional
class KOptionalCodec<E : Any>(val parent: Codec<E>) : Codec<KOptional<E>> {
override fun <T> encode(input: KOptional<E>, ops: DynamicOps<T>, prefix: T): DataResult<T> {
return input.map { parent.encode(it, ops, prefix) }.orElse { DataResult.success(ops.empty()) }
}
override fun <T> decode(ops: DynamicOps<T>, input: T): DataResult<Pair<KOptional<E>, T>> {
if (input == ops.empty()) {
return DataResult.success(Pair(KOptional(), ops.empty()))
} else {
return parent.decode(ops, input).map { Pair(KOptional(it.first), it.second) }
}
}
}