![JAR search and dependency download from the Maven repository](/logo.png)
personthecat.catlib.serialization.codec.SetCodec Maven / Gradle / Ivy
package personthecat.catlib.serialization.codec;
import com.google.common.collect.ImmutableSet;
import com.mojang.datafixers.util.Pair;
import com.mojang.datafixers.util.Unit;
import com.mojang.serialization.*;
import org.apache.commons.lang3.mutable.MutableObject;
import java.util.Set;
import java.util.stream.Stream;
public class SetCodec implements Codec> {
private final Codec elementCodec;
public SetCodec(final Codec elementCodec) {
this.elementCodec = elementCodec;
}
@Override
public DataResult encode(final Set input, final DynamicOps ops, final T prefix) {
final ListBuilder builder = ops.listBuilder();
for (final A a : input) {
builder.add(elementCodec.encodeStart(ops, a));
}
return builder.build(prefix);
}
@Override
public DataResult, T>> decode(final DynamicOps ops, final T input) {
return ops.getList(input).setLifecycle(Lifecycle.stable()).flatMap(stream -> {
final ImmutableSet.Builder read = ImmutableSet.builder();
final Stream.Builder failed = Stream.builder();
final MutableObject> result = new MutableObject<>(DataResult.success(Unit.INSTANCE, Lifecycle.stable()));
stream.accept(t -> {
final DataResult> element = elementCodec.decode(ops, t);
element.error().ifPresent(e -> failed.add(t));
result.setValue(result.getValue().apply2stable((r, v) -> {
read.add(v.getFirst());
return r;
}, element));
});
final ImmutableSet elements = read.build();
final T errors = ops.createList(failed.build());
final Pair, T> pair = Pair.of(elements, errors);
return result.getValue().map(unit -> pair).setPartial(pair);
});
}
@Override
public String toString() {
return "SetCodec[" + this.elementCodec + "]";
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy