From de24bd3786441914c8071092274ac160cc2c02c3 Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Thu, 14 Nov 2024 02:14:48 +0100 Subject: Add tests --- src/main/java/moe/nea/pcj/json/BasicCodecs.java | 4 - .../java/moe/nea/pcj/json/JsonLikeOperations.java | 2 +- src/main/java/moe/nea/pcj/json/ListBuilder.java | 4 +- src/main/java/moe/nea/pcj/json/RecordCodec.java | 31 +- src/main/java/moe/nea/pcj/json/RecordJoiners.java | 353 +++++++++++++++++++++ 5 files changed, 359 insertions(+), 35 deletions(-) create mode 100644 src/main/java/moe/nea/pcj/json/RecordJoiners.java (limited to 'src/main/java') diff --git a/src/main/java/moe/nea/pcj/json/BasicCodecs.java b/src/main/java/moe/nea/pcj/json/BasicCodecs.java index 8f957f9..565711d 100644 --- a/src/main/java/moe/nea/pcj/json/BasicCodecs.java +++ b/src/main/java/moe/nea/pcj/json/BasicCodecs.java @@ -44,8 +44,4 @@ public class BasicCodecs { return Result.ok(ops.createNumeric(data)); } }; - - public JsonCodec objectCodec() { - - } } \ No newline at end of file diff --git a/src/main/java/moe/nea/pcj/json/JsonLikeOperations.java b/src/main/java/moe/nea/pcj/json/JsonLikeOperations.java index 7bb0162..ffefeda 100644 --- a/src/main/java/moe/nea/pcj/json/JsonLikeOperations.java +++ b/src/main/java/moe/nea/pcj/json/JsonLikeOperations.java @@ -26,7 +26,7 @@ public interface JsonLikeOperations extends Operation { Result, ? extends JsonLikeError> getObject(Format format); - ListBuilder createList(); + ListBuilder createList(); Result, ? extends JsonLikeError> getList(Format format); } diff --git a/src/main/java/moe/nea/pcj/json/ListBuilder.java b/src/main/java/moe/nea/pcj/json/ListBuilder.java index c6e9220..fd2a407 100644 --- a/src/main/java/moe/nea/pcj/json/ListBuilder.java +++ b/src/main/java/moe/nea/pcj/json/ListBuilder.java @@ -1,7 +1,7 @@ package moe.nea.pcj.json; -public interface ListBuilder extends ListView { - Format complete(); +public interface ListBuilder extends ListView { + ElementFormat complete(); void add(ElementFormat value); diff --git a/src/main/java/moe/nea/pcj/json/RecordCodec.java b/src/main/java/moe/nea/pcj/json/RecordCodec.java index 7ba8815..cb6d696 100644 --- a/src/main/java/moe/nea/pcj/json/RecordCodec.java +++ b/src/main/java/moe/nea/pcj/json/RecordCodec.java @@ -1,26 +1,23 @@ package moe.nea.pcj.json; -import moe.nea.pcj.Codec; import moe.nea.pcj.Result; -import moe.nea.pcj.Tuple; import java.util.function.Function; -import java.util.stream.Stream; public record RecordCodec( MapCodec codec, Function getter ) { - private Result, JsonLikeError> enc(O data, JsonLikeOperations ops) { + Result, JsonLikeError> enc(O data, JsonLikeOperations ops) { return codec().encode(getter().apply(data), ops); } - private Result dec(RecordView data, JsonLikeOperations ops) { + Result dec(RecordView data, JsonLikeOperations ops) { return codec().decode(data, ops); } - private static Result, JsonLikeError> merge(Result, JsonLikeError> left, Result, JsonLikeError> right) { + static Result, JsonLikeError> merge(Result, JsonLikeError> left, Result, JsonLikeError> right) { return left.flatMap(l -> right.flatMap(l::mergeWith)); } @@ -34,26 +31,4 @@ public record RecordCodec( protected abstract Result decode(RecordView record, JsonLikeOperations ops); } - public static JsonCodec join( - RecordCodec arg1, - RecordCodec arg2, - Tuple.Func2 joiner - ) { - return new RecordCompleteCodec<>() { - - @Override - public Result encode(O data, JsonLikeOperations ops) { - return Stream.of(arg1.enc(data, ops), arg2.enc(data, ops)) - .reduce(Result.ok(ops.createObject()), RecordCodec::merge) - .map(RecordBuilder::complete); - } - - @Override - public Result decode(RecordView format, JsonLikeOperations ops) { - return Tuple.Tuple2.collect(new Tuple.Tuple2<>(arg1, arg2) - .map(it -> it.dec(format, ops), it -> it.dec(format, ops))) - .map(it -> it.applyTo(joiner)); - } - }; - } } diff --git a/src/main/java/moe/nea/pcj/json/RecordJoiners.java b/src/main/java/moe/nea/pcj/json/RecordJoiners.java new file mode 100644 index 0000000..3af622d --- /dev/null +++ b/src/main/java/moe/nea/pcj/json/RecordJoiners.java @@ -0,0 +1,353 @@ +// @generated by genrecord.ts +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 JsonCodec join( + RecordCodec arg0, + Tuple.Func1 joiner + ) { + return new RecordCompleteCodec<>() { + @Override + public Result encode(O data, JsonLikeOperations ops) { + return Stream.of(arg0.enc(data, ops)) + .reduce(Result.ok(ops.createObject()), RecordCodec::merge) + .map(RecordBuilder::complete); + } + @Override + public Result decode(RecordView format, JsonLikeOperations ops) { + return Tuple.Tuple1.collect(new Tuple.Tuple1<>(arg0.dec(format, ops))) + .map(it -> it.applyTo(joiner)); + } + }; + } + public static JsonCodec join( + RecordCodec arg0, + RecordCodec arg1, + Tuple.Func2 joiner + ) { + return new RecordCompleteCodec<>() { + @Override + public Result encode(O data, JsonLikeOperations ops) { + return Stream.of(arg0.enc(data, ops), arg1.enc(data, ops)) + .reduce(Result.ok(ops.createObject()), RecordCodec::merge) + .map(RecordBuilder::complete); + } + @Override + public Result decode(RecordView format, JsonLikeOperations ops) { + return Tuple.Tuple2.collect(new Tuple.Tuple2<>(arg0.dec(format, ops), arg1.dec(format, ops))) + .map(it -> it.applyTo(joiner)); + } + }; + } + public static JsonCodec join( + RecordCodec arg0, + RecordCodec arg1, + RecordCodec arg2, + Tuple.Func3 joiner + ) { + return new RecordCompleteCodec<>() { + @Override + public Result encode(O data, JsonLikeOperations 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); + } + @Override + public Result decode(RecordView format, JsonLikeOperations ops) { + return Tuple.Tuple3.collect(new Tuple.Tuple3<>(arg0.dec(format, ops), arg1.dec(format, ops), arg2.dec(format, ops))) + .map(it -> it.applyTo(joiner)); + } + }; + } + public static JsonCodec join( + RecordCodec arg0, + RecordCodec arg1, + RecordCodec arg2, + RecordCodec arg3, + Tuple.Func4 joiner + ) { + return new RecordCompleteCodec<>() { + @Override + public Result encode(O data, JsonLikeOperations 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); + } + @Override + public Result decode(RecordView format, JsonLikeOperations ops) { + return Tuple.Tuple4.collect(new Tuple.Tuple4<>(arg0.dec(format, ops), arg1.dec(format, ops), arg2.dec(format, ops), arg3.dec(format, ops))) + .map(it -> it.applyTo(joiner)); + } + }; + } + public static JsonCodec join( + RecordCodec arg0, + RecordCodec arg1, + RecordCodec arg2, + RecordCodec arg3, + RecordCodec arg4, + Tuple.Func5 joiner + ) { + return new RecordCompleteCodec<>() { + @Override + public Result encode(O data, JsonLikeOperations 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); + } + @Override + public Result decode(RecordView format, JsonLikeOperations ops) { + return Tuple.Tuple5.collect(new Tuple.Tuple5<>(arg0.dec(format, ops), arg1.dec(format, ops), arg2.dec(format, ops), arg3.dec(format, ops), arg4.dec(format, ops))) + .map(it -> it.applyTo(joiner)); + } + }; + } + public static JsonCodec join( + RecordCodec arg0, + RecordCodec arg1, + RecordCodec arg2, + RecordCodec arg3, + RecordCodec arg4, + RecordCodec arg5, + Tuple.Func6 joiner + ) { + return new RecordCompleteCodec<>() { + @Override + public Result encode(O data, JsonLikeOperations 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); + } + @Override + public Result decode(RecordView format, JsonLikeOperations ops) { + return Tuple.Tuple6.collect(new Tuple.Tuple6<>(arg0.dec(format, ops), arg1.dec(format, ops), arg2.dec(format, ops), arg3.dec(format, ops), arg4.dec(format, ops), arg5.dec(format, ops))) + .map(it -> it.applyTo(joiner)); + } + }; + } + public static JsonCodec join( + RecordCodec arg0, + RecordCodec arg1, + RecordCodec arg2, + RecordCodec arg3, + RecordCodec arg4, + RecordCodec arg5, + RecordCodec arg6, + Tuple.Func7 joiner + ) { + return new RecordCompleteCodec<>() { + @Override + public Result encode(O data, JsonLikeOperations 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); + } + @Override + public Result decode(RecordView format, JsonLikeOperations ops) { + return Tuple.Tuple7.collect(new Tuple.Tuple7<>(arg0.dec(format, ops), arg1.dec(format, ops), arg2.dec(format, ops), arg3.dec(format, ops), arg4.dec(format, ops), arg5.dec(format, ops), arg6.dec(format, ops))) + .map(it -> it.applyTo(joiner)); + } + }; + } + public static JsonCodec join( + RecordCodec arg0, + RecordCodec arg1, + RecordCodec arg2, + RecordCodec arg3, + RecordCodec arg4, + RecordCodec arg5, + RecordCodec arg6, + RecordCodec arg7, + Tuple.Func8 joiner + ) { + return new RecordCompleteCodec<>() { + @Override + public Result encode(O data, JsonLikeOperations 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); + } + @Override + public Result decode(RecordView format, JsonLikeOperations ops) { + return Tuple.Tuple8.collect(new Tuple.Tuple8<>(arg0.dec(format, ops), arg1.dec(format, ops), arg2.dec(format, ops), arg3.dec(format, ops), arg4.dec(format, ops), arg5.dec(format, ops), arg6.dec(format, ops), arg7.dec(format, ops))) + .map(it -> it.applyTo(joiner)); + } + }; + } + public static JsonCodec join( + RecordCodec arg0, + RecordCodec arg1, + RecordCodec arg2, + RecordCodec arg3, + RecordCodec arg4, + RecordCodec arg5, + RecordCodec arg6, + RecordCodec arg7, + RecordCodec arg8, + Tuple.Func9 joiner + ) { + return new RecordCompleteCodec<>() { + @Override + public Result encode(O data, JsonLikeOperations 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); + } + @Override + public Result decode(RecordView format, JsonLikeOperations ops) { + return Tuple.Tuple9.collect(new Tuple.Tuple9<>(arg0.dec(format, ops), arg1.dec(format, ops), arg2.dec(format, ops), arg3.dec(format, ops), arg4.dec(format, ops), arg5.dec(format, ops), arg6.dec(format, ops), arg7.dec(format, ops), arg8.dec(format, ops))) + .map(it -> it.applyTo(joiner)); + } + }; + } + public static JsonCodec join( + RecordCodec arg0, + RecordCodec arg1, + RecordCodec arg2, + RecordCodec arg3, + RecordCodec arg4, + RecordCodec arg5, + RecordCodec arg6, + RecordCodec arg7, + RecordCodec arg8, + RecordCodec arg9, + Tuple.Func10 joiner + ) { + return new RecordCompleteCodec<>() { + @Override + public Result encode(O data, JsonLikeOperations 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); + } + @Override + public Result decode(RecordView format, JsonLikeOperations ops) { + return Tuple.Tuple10.collect(new Tuple.Tuple10<>(arg0.dec(format, ops), arg1.dec(format, ops), arg2.dec(format, ops), arg3.dec(format, ops), arg4.dec(format, ops), arg5.dec(format, ops), arg6.dec(format, ops), arg7.dec(format, ops), arg8.dec(format, ops), arg9.dec(format, ops))) + .map(it -> it.applyTo(joiner)); + } + }; + } + public static JsonCodec join( + RecordCodec arg0, + RecordCodec arg1, + RecordCodec arg2, + RecordCodec arg3, + RecordCodec arg4, + RecordCodec arg5, + RecordCodec arg6, + RecordCodec arg7, + RecordCodec arg8, + RecordCodec arg9, + RecordCodec arg10, + Tuple.Func11 joiner + ) { + return new RecordCompleteCodec<>() { + @Override + public Result encode(O data, JsonLikeOperations 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); + } + @Override + public Result decode(RecordView format, JsonLikeOperations ops) { + return Tuple.Tuple11.collect(new Tuple.Tuple11<>(arg0.dec(format, ops), arg1.dec(format, ops), arg2.dec(format, ops), arg3.dec(format, ops), arg4.dec(format, ops), arg5.dec(format, ops), arg6.dec(format, ops), arg7.dec(format, ops), arg8.dec(format, ops), arg9.dec(format, ops), arg10.dec(format, ops))) + .map(it -> it.applyTo(joiner)); + } + }; + } + public static JsonCodec join( + RecordCodec arg0, + RecordCodec arg1, + RecordCodec arg2, + RecordCodec arg3, + RecordCodec arg4, + RecordCodec arg5, + RecordCodec arg6, + RecordCodec arg7, + RecordCodec arg8, + RecordCodec arg9, + RecordCodec arg10, + RecordCodec arg11, + Tuple.Func12 joiner + ) { + return new RecordCompleteCodec<>() { + @Override + public Result encode(O data, JsonLikeOperations 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); + } + @Override + public Result decode(RecordView format, JsonLikeOperations ops) { + return Tuple.Tuple12.collect(new Tuple.Tuple12<>(arg0.dec(format, ops), arg1.dec(format, ops), arg2.dec(format, ops), arg3.dec(format, ops), arg4.dec(format, ops), arg5.dec(format, ops), arg6.dec(format, ops), arg7.dec(format, ops), arg8.dec(format, ops), arg9.dec(format, ops), arg10.dec(format, ops), arg11.dec(format, ops))) + .map(it -> it.applyTo(joiner)); + } + }; + } + public static JsonCodec join( + RecordCodec arg0, + RecordCodec arg1, + RecordCodec arg2, + RecordCodec arg3, + RecordCodec arg4, + RecordCodec arg5, + RecordCodec arg6, + RecordCodec arg7, + RecordCodec arg8, + RecordCodec arg9, + RecordCodec arg10, + RecordCodec arg11, + RecordCodec arg12, + Tuple.Func13 joiner + ) { + return new RecordCompleteCodec<>() { + @Override + public Result encode(O data, JsonLikeOperations 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); + } + @Override + public Result decode(RecordView format, JsonLikeOperations ops) { + return Tuple.Tuple13.collect(new Tuple.Tuple13<>(arg0.dec(format, ops), arg1.dec(format, ops), arg2.dec(format, ops), arg3.dec(format, ops), arg4.dec(format, ops), arg5.dec(format, ops), arg6.dec(format, ops), arg7.dec(format, ops), arg8.dec(format, ops), arg9.dec(format, ops), arg10.dec(format, ops), arg11.dec(format, ops), arg12.dec(format, ops))) + .map(it -> it.applyTo(joiner)); + } + }; + } + public static JsonCodec join( + RecordCodec arg0, + RecordCodec arg1, + RecordCodec arg2, + RecordCodec arg3, + RecordCodec arg4, + RecordCodec arg5, + RecordCodec arg6, + RecordCodec arg7, + RecordCodec arg8, + RecordCodec arg9, + RecordCodec arg10, + RecordCodec arg11, + RecordCodec arg12, + RecordCodec arg13, + Tuple.Func14 joiner + ) { + return new RecordCompleteCodec<>() { + @Override + public Result encode(O data, JsonLikeOperations 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); + } + @Override + public Result decode(RecordView format, JsonLikeOperations ops) { + return Tuple.Tuple14.collect(new Tuple.Tuple14<>(arg0.dec(format, ops), arg1.dec(format, ops), arg2.dec(format, ops), arg3.dec(format, ops), arg4.dec(format, ops), arg5.dec(format, ops), arg6.dec(format, ops), arg7.dec(format, ops), arg8.dec(format, ops), arg9.dec(format, ops), arg10.dec(format, ops), arg11.dec(format, ops), arg12.dec(format, ops), arg13.dec(format, ops))) + .map(it -> it.applyTo(joiner)); + } + }; + } +} -- cgit