diff options
Diffstat (limited to 'src/main/java/moe')
-rw-r--r-- | src/main/java/moe/nea/pcj/Result.java | 5 | ||||
-rw-r--r-- | src/main/java/moe/nea/pcj/json/MapCodec.java | 39 | ||||
-rw-r--r-- | src/main/java/moe/nea/pcj/json/RecordCodec.java | 13 | ||||
-rw-r--r-- | src/main/java/moe/nea/pcj/json/RecordJoiners.java | 127 |
4 files changed, 98 insertions, 86 deletions
diff --git a/src/main/java/moe/nea/pcj/Result.java b/src/main/java/moe/nea/pcj/Result.java index af5398e..a9c2494 100644 --- a/src/main/java/moe/nea/pcj/Result.java +++ b/src/main/java/moe/nea/pcj/Result.java @@ -7,7 +7,6 @@ import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.Optional; -import java.util.function.Consumer; import java.util.function.Function; public sealed interface Result<Good, Bad> permits Result.Ok, Result.Fail { @@ -37,6 +36,10 @@ public sealed interface Result<Good, Bad> permits Result.Ok, Result.Fail { <NextBad> Result<Good, NextBad> mapErrors(Function<List<Bad>, List<NextBad>> mapper); + default Result<Good, Bad> appendError(Bad error) { + return appendErrors(List.of(error)); + } + Result<Good, Bad> appendErrors(List<Bad> error); record Ok<Good, Bad>(Good okValue) implements Result<Good, Bad> { diff --git a/src/main/java/moe/nea/pcj/json/MapCodec.java b/src/main/java/moe/nea/pcj/json/MapCodec.java index 4b76150..b18a639 100644 --- a/src/main/java/moe/nea/pcj/json/MapCodec.java +++ b/src/main/java/moe/nea/pcj/json/MapCodec.java @@ -5,14 +5,49 @@ import moe.nea.pcj.Result; import java.util.function.Function; public interface MapCodec<T, Format> { - Result<T, JsonLikeError> decode( + Result<? extends T, JsonLikeError> decode( RecordView<Format> record, JsonLikeOperations<Format> ops); Result<RecordBuilder<Format>, JsonLikeError> encode(T value, JsonLikeOperations<Format> ops); + default <O> MapCodec<? extends O, Format> dispatch( + Function<? super O, ? extends T> keyExtractor, + Function<? super T, MapCodec<? extends O, Format>> codecGenerator + ) { + // TODO: the codecGenerator function is not exactly typesafe. there should be some limit on keyExtractor and codecGenerator working in tandem + return new MapCodec<>() { + @Override + public Result<O, JsonLikeError> decode(RecordView<Format> record, JsonLikeOperations<Format> ops) { + return MapCodec.this.decode(record, ops) + .map(codecGenerator::apply) + .flatMap(codec -> codec.decode(record, ops)); + } + + @Override + public Result<RecordBuilder<Format>, JsonLikeError> encode(O value, JsonLikeOperations<Format> ops) { + var key = keyExtractor.apply(value); + var codec = codecGenerator.apply(key); + return MapCodec.this + .encode(key, ops) + .flatMap(keyEncoded -> ((MapCodec<O, Format>) codec).encode(value, ops).flatMap(keyEncoded::mergeWith)); + } + }; + } + default JsonCodec<T, Format> codec() { - return RecordJoiners.join(withGetter(it -> it), it -> it); + return new JsonCodec<>() { + @Override + public Result<? extends T, ? extends JsonLikeError> decode(Format format, JsonLikeOperations<Format> ops) { + return Result.<RecordView<Format>, JsonLikeError>cast(ops.getObject(format)) + .flatMap(record -> MapCodec.this.decode(record, ops)); + } + + @Override + public Result<? extends Format, ? extends JsonLikeError> encode(T data, JsonLikeOperations<Format> ops) { + return Result.cast(MapCodec.this.encode(data, ops)).map(RecordBuilder::complete); + } + }; } default <O> RecordCodec<O, T, Format> withGetter(Function<O, T> getter) { diff --git a/src/main/java/moe/nea/pcj/json/RecordCodec.java b/src/main/java/moe/nea/pcj/json/RecordCodec.java index cb6d696..fa7aac7 100644 --- a/src/main/java/moe/nea/pcj/json/RecordCodec.java +++ b/src/main/java/moe/nea/pcj/json/RecordCodec.java @@ -14,21 +14,10 @@ public record RecordCodec<O, T, Format>( } Result<T, JsonLikeError> dec(RecordView<Format> data, JsonLikeOperations<Format> ops) { - return codec().decode(data, ops); + return Result.cast(codec().decode(data, ops)); } static <Format> Result<RecordBuilder<Format>, JsonLikeError> merge(Result<RecordBuilder<Format>, JsonLikeError> left, Result<RecordBuilder<Format>, JsonLikeError> right) { return left.flatMap(l -> right.flatMap(l::mergeWith)); } - - abstract static class RecordCompleteCodec<O, Format> implements JsonCodec<O, Format> { - @Override - public Result<O, JsonLikeError> decode(Format format, JsonLikeOperations<Format> ops) { - return Result.<RecordView<Format>, JsonLikeError>cast(ops.getObject(format)) - .flatMap(record -> (decode(record, ops))); - } - - protected abstract Result<O, JsonLikeError> decode(RecordView<Format> record, JsonLikeOperations<Format> ops); - } - } diff --git a/src/main/java/moe/nea/pcj/json/RecordJoiners.java b/src/main/java/moe/nea/pcj/json/RecordJoiners.java index 3af622d..57bdd63 100644 --- a/src/main/java/moe/nea/pcj/json/RecordJoiners.java +++ b/src/main/java/moe/nea/pcj/json/RecordJoiners.java @@ -2,21 +2,19 @@ package moe.nea.pcj.json; import moe.nea.pcj.*; -import moe.nea.pcj.json.RecordCodec.*; import java.util.stream.*; @SuppressWarnings("unused") public class RecordJoiners { - public static <T0, O, Format> JsonCodec<O, Format> join( + public static <T0, O, Format> MapCodec<O, Format> join( RecordCodec<O, T0, Format> arg0, Tuple.Func1<O, T0> joiner ) { - return new RecordCompleteCodec<>() { + return new MapCodec<>() { @Override - public Result<Format, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { + public Result<RecordBuilder<Format>, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { return Stream.of(arg0.enc(data, ops)) - .reduce(Result.ok(ops.createObject()), RecordCodec::merge) - .map(RecordBuilder::complete); + .reduce(Result.ok(ops.createObject()), RecordCodec::merge); } @Override public Result<O, JsonLikeError> decode(RecordView<Format> format, JsonLikeOperations<Format> ops) { @@ -25,17 +23,16 @@ public class RecordJoiners { } }; } - public static <T0, T1, O, Format> JsonCodec<O, Format> join( + public static <T0, T1, O, Format> MapCodec<O, Format> join( RecordCodec<O, T0, Format> arg0, RecordCodec<O, T1, Format> arg1, Tuple.Func2<O, T0, T1> joiner ) { - return new RecordCompleteCodec<>() { + return new MapCodec<>() { @Override - public Result<Format, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { + public Result<RecordBuilder<Format>, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { return Stream.of(arg0.enc(data, ops), arg1.enc(data, ops)) - .reduce(Result.ok(ops.createObject()), RecordCodec::merge) - .map(RecordBuilder::complete); + .reduce(Result.ok(ops.createObject()), RecordCodec::merge); } @Override public Result<O, JsonLikeError> decode(RecordView<Format> format, JsonLikeOperations<Format> ops) { @@ -44,18 +41,17 @@ public class RecordJoiners { } }; } - public static <T0, T1, T2, O, Format> JsonCodec<O, Format> join( + public static <T0, T1, T2, O, Format> MapCodec<O, Format> join( RecordCodec<O, T0, Format> arg0, RecordCodec<O, T1, Format> arg1, RecordCodec<O, T2, Format> arg2, Tuple.Func3<O, T0, T1, T2> joiner ) { - return new RecordCompleteCodec<>() { + return new MapCodec<>() { @Override - public Result<Format, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { + public Result<RecordBuilder<Format>, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { return Stream.of(arg0.enc(data, ops), arg1.enc(data, ops), arg2.enc(data, ops)) - .reduce(Result.ok(ops.createObject()), RecordCodec::merge) - .map(RecordBuilder::complete); + .reduce(Result.ok(ops.createObject()), RecordCodec::merge); } @Override public Result<O, JsonLikeError> decode(RecordView<Format> format, JsonLikeOperations<Format> ops) { @@ -64,19 +60,18 @@ public class RecordJoiners { } }; } - public static <T0, T1, T2, T3, O, Format> JsonCodec<O, Format> join( + public static <T0, T1, T2, T3, O, Format> MapCodec<O, Format> join( RecordCodec<O, T0, Format> arg0, RecordCodec<O, T1, Format> arg1, RecordCodec<O, T2, Format> arg2, RecordCodec<O, T3, Format> arg3, Tuple.Func4<O, T0, T1, T2, T3> joiner ) { - return new RecordCompleteCodec<>() { + return new MapCodec<>() { @Override - public Result<Format, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { + public Result<RecordBuilder<Format>, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { return Stream.of(arg0.enc(data, ops), arg1.enc(data, ops), arg2.enc(data, ops), arg3.enc(data, ops)) - .reduce(Result.ok(ops.createObject()), RecordCodec::merge) - .map(RecordBuilder::complete); + .reduce(Result.ok(ops.createObject()), RecordCodec::merge); } @Override public Result<O, JsonLikeError> decode(RecordView<Format> format, JsonLikeOperations<Format> ops) { @@ -85,7 +80,7 @@ public class RecordJoiners { } }; } - public static <T0, T1, T2, T3, T4, O, Format> JsonCodec<O, Format> join( + public static <T0, T1, T2, T3, T4, O, Format> MapCodec<O, Format> join( RecordCodec<O, T0, Format> arg0, RecordCodec<O, T1, Format> arg1, RecordCodec<O, T2, Format> arg2, @@ -93,12 +88,11 @@ public class RecordJoiners { RecordCodec<O, T4, Format> arg4, Tuple.Func5<O, T0, T1, T2, T3, T4> joiner ) { - return new RecordCompleteCodec<>() { + return new MapCodec<>() { @Override - public Result<Format, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { + public Result<RecordBuilder<Format>, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { return Stream.of(arg0.enc(data, ops), arg1.enc(data, ops), arg2.enc(data, ops), arg3.enc(data, ops), arg4.enc(data, ops)) - .reduce(Result.ok(ops.createObject()), RecordCodec::merge) - .map(RecordBuilder::complete); + .reduce(Result.ok(ops.createObject()), RecordCodec::merge); } @Override public Result<O, JsonLikeError> decode(RecordView<Format> format, JsonLikeOperations<Format> ops) { @@ -107,7 +101,7 @@ public class RecordJoiners { } }; } - public static <T0, T1, T2, T3, T4, T5, O, Format> JsonCodec<O, Format> join( + public static <T0, T1, T2, T3, T4, T5, O, Format> MapCodec<O, Format> join( RecordCodec<O, T0, Format> arg0, RecordCodec<O, T1, Format> arg1, RecordCodec<O, T2, Format> arg2, @@ -116,12 +110,11 @@ public class RecordJoiners { RecordCodec<O, T5, Format> arg5, Tuple.Func6<O, T0, T1, T2, T3, T4, T5> joiner ) { - return new RecordCompleteCodec<>() { + return new MapCodec<>() { @Override - public Result<Format, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { + public Result<RecordBuilder<Format>, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { return Stream.of(arg0.enc(data, ops), arg1.enc(data, ops), arg2.enc(data, ops), arg3.enc(data, ops), arg4.enc(data, ops), arg5.enc(data, ops)) - .reduce(Result.ok(ops.createObject()), RecordCodec::merge) - .map(RecordBuilder::complete); + .reduce(Result.ok(ops.createObject()), RecordCodec::merge); } @Override public Result<O, JsonLikeError> decode(RecordView<Format> format, JsonLikeOperations<Format> ops) { @@ -130,7 +123,7 @@ public class RecordJoiners { } }; } - public static <T0, T1, T2, T3, T4, T5, T6, O, Format> JsonCodec<O, Format> join( + public static <T0, T1, T2, T3, T4, T5, T6, O, Format> MapCodec<O, Format> join( RecordCodec<O, T0, Format> arg0, RecordCodec<O, T1, Format> arg1, RecordCodec<O, T2, Format> arg2, @@ -140,12 +133,11 @@ public class RecordJoiners { RecordCodec<O, T6, Format> arg6, Tuple.Func7<O, T0, T1, T2, T3, T4, T5, T6> joiner ) { - return new RecordCompleteCodec<>() { + return new MapCodec<>() { @Override - public Result<Format, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { + public Result<RecordBuilder<Format>, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { return Stream.of(arg0.enc(data, ops), arg1.enc(data, ops), arg2.enc(data, ops), arg3.enc(data, ops), arg4.enc(data, ops), arg5.enc(data, ops), arg6.enc(data, ops)) - .reduce(Result.ok(ops.createObject()), RecordCodec::merge) - .map(RecordBuilder::complete); + .reduce(Result.ok(ops.createObject()), RecordCodec::merge); } @Override public Result<O, JsonLikeError> decode(RecordView<Format> format, JsonLikeOperations<Format> ops) { @@ -154,7 +146,7 @@ public class RecordJoiners { } }; } - public static <T0, T1, T2, T3, T4, T5, T6, T7, O, Format> JsonCodec<O, Format> join( + public static <T0, T1, T2, T3, T4, T5, T6, T7, O, Format> MapCodec<O, Format> join( RecordCodec<O, T0, Format> arg0, RecordCodec<O, T1, Format> arg1, RecordCodec<O, T2, Format> arg2, @@ -165,12 +157,11 @@ public class RecordJoiners { RecordCodec<O, T7, Format> arg7, Tuple.Func8<O, T0, T1, T2, T3, T4, T5, T6, T7> joiner ) { - return new RecordCompleteCodec<>() { + return new MapCodec<>() { @Override - public Result<Format, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { + public Result<RecordBuilder<Format>, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { return Stream.of(arg0.enc(data, ops), arg1.enc(data, ops), arg2.enc(data, ops), arg3.enc(data, ops), arg4.enc(data, ops), arg5.enc(data, ops), arg6.enc(data, ops), arg7.enc(data, ops)) - .reduce(Result.ok(ops.createObject()), RecordCodec::merge) - .map(RecordBuilder::complete); + .reduce(Result.ok(ops.createObject()), RecordCodec::merge); } @Override public Result<O, JsonLikeError> decode(RecordView<Format> format, JsonLikeOperations<Format> ops) { @@ -179,7 +170,7 @@ public class RecordJoiners { } }; } - public static <T0, T1, T2, T3, T4, T5, T6, T7, T8, O, Format> JsonCodec<O, Format> join( + public static <T0, T1, T2, T3, T4, T5, T6, T7, T8, O, Format> MapCodec<O, Format> join( RecordCodec<O, T0, Format> arg0, RecordCodec<O, T1, Format> arg1, RecordCodec<O, T2, Format> arg2, @@ -191,12 +182,11 @@ public class RecordJoiners { RecordCodec<O, T8, Format> arg8, Tuple.Func9<O, T0, T1, T2, T3, T4, T5, T6, T7, T8> joiner ) { - return new RecordCompleteCodec<>() { + return new MapCodec<>() { @Override - public Result<Format, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { + public Result<RecordBuilder<Format>, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { return Stream.of(arg0.enc(data, ops), arg1.enc(data, ops), arg2.enc(data, ops), arg3.enc(data, ops), arg4.enc(data, ops), arg5.enc(data, ops), arg6.enc(data, ops), arg7.enc(data, ops), arg8.enc(data, ops)) - .reduce(Result.ok(ops.createObject()), RecordCodec::merge) - .map(RecordBuilder::complete); + .reduce(Result.ok(ops.createObject()), RecordCodec::merge); } @Override public Result<O, JsonLikeError> decode(RecordView<Format> format, JsonLikeOperations<Format> ops) { @@ -205,7 +195,7 @@ public class RecordJoiners { } }; } - public static <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, O, Format> JsonCodec<O, Format> join( + public static <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, O, Format> MapCodec<O, Format> join( RecordCodec<O, T0, Format> arg0, RecordCodec<O, T1, Format> arg1, RecordCodec<O, T2, Format> arg2, @@ -218,12 +208,11 @@ public class RecordJoiners { RecordCodec<O, T9, Format> arg9, Tuple.Func10<O, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> joiner ) { - return new RecordCompleteCodec<>() { + return new MapCodec<>() { @Override - public Result<Format, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { + public Result<RecordBuilder<Format>, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { return Stream.of(arg0.enc(data, ops), arg1.enc(data, ops), arg2.enc(data, ops), arg3.enc(data, ops), arg4.enc(data, ops), arg5.enc(data, ops), arg6.enc(data, ops), arg7.enc(data, ops), arg8.enc(data, ops), arg9.enc(data, ops)) - .reduce(Result.ok(ops.createObject()), RecordCodec::merge) - .map(RecordBuilder::complete); + .reduce(Result.ok(ops.createObject()), RecordCodec::merge); } @Override public Result<O, JsonLikeError> decode(RecordView<Format> format, JsonLikeOperations<Format> ops) { @@ -232,7 +221,7 @@ public class RecordJoiners { } }; } - public static <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, O, Format> JsonCodec<O, Format> join( + public static <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, O, Format> MapCodec<O, Format> join( RecordCodec<O, T0, Format> arg0, RecordCodec<O, T1, Format> arg1, RecordCodec<O, T2, Format> arg2, @@ -246,12 +235,11 @@ public class RecordJoiners { RecordCodec<O, T10, Format> arg10, Tuple.Func11<O, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> joiner ) { - return new RecordCompleteCodec<>() { + return new MapCodec<>() { @Override - public Result<Format, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { + public Result<RecordBuilder<Format>, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { return Stream.of(arg0.enc(data, ops), arg1.enc(data, ops), arg2.enc(data, ops), arg3.enc(data, ops), arg4.enc(data, ops), arg5.enc(data, ops), arg6.enc(data, ops), arg7.enc(data, ops), arg8.enc(data, ops), arg9.enc(data, ops), arg10.enc(data, ops)) - .reduce(Result.ok(ops.createObject()), RecordCodec::merge) - .map(RecordBuilder::complete); + .reduce(Result.ok(ops.createObject()), RecordCodec::merge); } @Override public Result<O, JsonLikeError> decode(RecordView<Format> format, JsonLikeOperations<Format> ops) { @@ -260,7 +248,7 @@ public class RecordJoiners { } }; } - public static <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, O, Format> JsonCodec<O, Format> join( + public static <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, O, Format> MapCodec<O, Format> join( RecordCodec<O, T0, Format> arg0, RecordCodec<O, T1, Format> arg1, RecordCodec<O, T2, Format> arg2, @@ -275,12 +263,11 @@ public class RecordJoiners { RecordCodec<O, T11, Format> arg11, Tuple.Func12<O, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> joiner ) { - return new RecordCompleteCodec<>() { + return new MapCodec<>() { @Override - public Result<Format, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { + public Result<RecordBuilder<Format>, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { return Stream.of(arg0.enc(data, ops), arg1.enc(data, ops), arg2.enc(data, ops), arg3.enc(data, ops), arg4.enc(data, ops), arg5.enc(data, ops), arg6.enc(data, ops), arg7.enc(data, ops), arg8.enc(data, ops), arg9.enc(data, ops), arg10.enc(data, ops), arg11.enc(data, ops)) - .reduce(Result.ok(ops.createObject()), RecordCodec::merge) - .map(RecordBuilder::complete); + .reduce(Result.ok(ops.createObject()), RecordCodec::merge); } @Override public Result<O, JsonLikeError> decode(RecordView<Format> format, JsonLikeOperations<Format> ops) { @@ -289,7 +276,7 @@ public class RecordJoiners { } }; } - public static <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, O, Format> JsonCodec<O, Format> join( + public static <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, O, Format> MapCodec<O, Format> join( RecordCodec<O, T0, Format> arg0, RecordCodec<O, T1, Format> arg1, RecordCodec<O, T2, Format> arg2, @@ -305,12 +292,11 @@ public class RecordJoiners { RecordCodec<O, T12, Format> arg12, Tuple.Func13<O, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> joiner ) { - return new RecordCompleteCodec<>() { + return new MapCodec<>() { @Override - public Result<Format, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { + public Result<RecordBuilder<Format>, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { return Stream.of(arg0.enc(data, ops), arg1.enc(data, ops), arg2.enc(data, ops), arg3.enc(data, ops), arg4.enc(data, ops), arg5.enc(data, ops), arg6.enc(data, ops), arg7.enc(data, ops), arg8.enc(data, ops), arg9.enc(data, ops), arg10.enc(data, ops), arg11.enc(data, ops), arg12.enc(data, ops)) - .reduce(Result.ok(ops.createObject()), RecordCodec::merge) - .map(RecordBuilder::complete); + .reduce(Result.ok(ops.createObject()), RecordCodec::merge); } @Override public Result<O, JsonLikeError> decode(RecordView<Format> format, JsonLikeOperations<Format> ops) { @@ -319,7 +305,7 @@ public class RecordJoiners { } }; } - public static <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, O, Format> JsonCodec<O, Format> join( + public static <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, O, Format> MapCodec<O, Format> join( RecordCodec<O, T0, Format> arg0, RecordCodec<O, T1, Format> arg1, RecordCodec<O, T2, Format> arg2, @@ -336,12 +322,11 @@ public class RecordJoiners { RecordCodec<O, T13, Format> arg13, Tuple.Func14<O, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> joiner ) { - return new RecordCompleteCodec<>() { + return new MapCodec<>() { @Override - public Result<Format, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { + public Result<RecordBuilder<Format>, JsonLikeError> encode(O data, JsonLikeOperations<Format> ops) { return Stream.of(arg0.enc(data, ops), arg1.enc(data, ops), arg2.enc(data, ops), arg3.enc(data, ops), arg4.enc(data, ops), arg5.enc(data, ops), arg6.enc(data, ops), arg7.enc(data, ops), arg8.enc(data, ops), arg9.enc(data, ops), arg10.enc(data, ops), arg11.enc(data, ops), arg12.enc(data, ops), arg13.enc(data, ops)) - .reduce(Result.ok(ops.createObject()), RecordCodec::merge) - .map(RecordBuilder::complete); + .reduce(Result.ok(ops.createObject()), RecordCodec::merge); } @Override public Result<O, JsonLikeError> decode(RecordView<Format> format, JsonLikeOperations<Format> ops) { |