KOptional codec
This commit is contained in:
parent
d2ff43946e
commit
454783a99a
@ -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) }
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user