From 4289518c93cf8bf04f88125ef3deea3af8978607 Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Thu, 14 Nov 2024 03:02:05 +0100 Subject: Add named objects --- gson/src/test/java/moe/nea/jcp/gson/test/TestBasic.java | 7 +++++++ src/main/java/moe/nea/pcj/json/JsonCodec.java | 15 ++++++++++++++- src/main/java/moe/nea/pcj/json/NamedObject.java | 4 ++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/main/java/moe/nea/pcj/json/NamedObject.java diff --git a/gson/src/test/java/moe/nea/jcp/gson/test/TestBasic.java b/gson/src/test/java/moe/nea/jcp/gson/test/TestBasic.java index 861656e..70c4345 100644 --- a/gson/src/test/java/moe/nea/jcp/gson/test/TestBasic.java +++ b/gson/src/test/java/moe/nea/jcp/gson/test/TestBasic.java @@ -16,6 +16,7 @@ import moe.nea.pcj.json.DuplicateJsonKey; import moe.nea.pcj.json.JsonLikeError; import moe.nea.pcj.json.JsonLikeOperations; import moe.nea.pcj.json.MissingKey; +import moe.nea.pcj.json.NamedObject; import moe.nea.pcj.json.RecordJoiners; import moe.nea.pcj.json.UnexpectedJsonElement; import org.junit.jupiter.api.Assertions; @@ -96,6 +97,12 @@ public class TestBasic { ) {} + @Test + void testNamedFunction() { + assertFail(decode(codecs.STRING.named("Test"), mkPrim(0)), + new NamedObject("Test", new UnexpectedJsonElement("string", mkPrim(0)))); + } + @Test void testObject() { var codec = RecordJoiners.join( diff --git a/src/main/java/moe/nea/pcj/json/JsonCodec.java b/src/main/java/moe/nea/pcj/json/JsonCodec.java index 6195bee..c5c750b 100644 --- a/src/main/java/moe/nea/pcj/json/JsonCodec.java +++ b/src/main/java/moe/nea/pcj/json/JsonCodec.java @@ -2,7 +2,6 @@ package moe.nea.pcj.json; import moe.nea.pcj.Codec; import moe.nea.pcj.Result; -import moe.nea.pcj.Unit; import java.util.ArrayList; import java.util.List; @@ -47,6 +46,20 @@ public interface JsonCodec extends Codec< }; } + default JsonCodec named(String name) { + return new JsonCodec<>() { + @Override + public Result decode(Format format, JsonLikeOperations ops) { + return JsonCodec.this.decode(format, ops).mapError(it -> new NamedObject(name, it)); + } + + @Override + public Result encode(T data, JsonLikeOperations ops) { + return JsonCodec.this.encode(data, ops).mapError(it -> new NamedObject(name, it)); + } + }; + } + default MapCodec fieldOf(String key) { return new MapCodec<>() { @Override diff --git a/src/main/java/moe/nea/pcj/json/NamedObject.java b/src/main/java/moe/nea/pcj/json/NamedObject.java new file mode 100644 index 0000000..aedc87b --- /dev/null +++ b/src/main/java/moe/nea/pcj/json/NamedObject.java @@ -0,0 +1,4 @@ +package moe.nea.pcj.json; + +public record NamedObject(String name, JsonLikeError error) implements JsonLikeError { +} -- cgit