summaryrefslogtreecommitdiff
path: root/src/main/java/moe/nea/pcj/json/JsonCodec.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/moe/nea/pcj/json/JsonCodec.java')
-rw-r--r--src/main/java/moe/nea/pcj/json/JsonCodec.java84
1 files changed, 0 insertions, 84 deletions
diff --git a/src/main/java/moe/nea/pcj/json/JsonCodec.java b/src/main/java/moe/nea/pcj/json/JsonCodec.java
deleted file mode 100644
index c5c750b..0000000
--- a/src/main/java/moe/nea/pcj/json/JsonCodec.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package moe.nea.pcj.json;
-
-import moe.nea.pcj.Codec;
-import moe.nea.pcj.Result;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public interface JsonCodec<T, Format> extends Codec<
- T, Format, JsonLikeOperations<Format>,
- JsonLikeError, JsonLikeError> {
-
- default JsonCodec<List<T>, Format> listOf() {
- return new JsonCodec<>() {
- @Override
- public Result<Format, JsonLikeError> encode(List<T> data, JsonLikeOperations<Format> ops) {
- var list = ops.createList();
- var erros = new ArrayList<JsonLikeError>();
- for (int i = 0; i < data.size(); i++) {
- var datum = data.get(i);
- final var index = i;
- var result = JsonCodec.this.encode(datum, ops)
- .mapError(it -> new AtIndex(index, it));
- erros.addAll(result.errors());
- result.valueOrPartial().ifPresent(list::add);
- }
- return Result.<Format, JsonLikeError>ok(list.complete()).appendErrors(erros);
- }
-
- @Override
- public Result<List<T>, JsonLikeError> decode(Format format, JsonLikeOperations<Format> ops) {
- var view = Result.<ListView<Format>, JsonLikeError>cast(ops.getList(format));
- return view.flatMap(elements -> {
- var acc = new ArrayList<T>(elements.length());
- var errors = new ArrayList<JsonLikeError>();
- for (int i = 0; i < elements.length(); i++) {
- final var index = i;
- var result = JsonCodec.this.decode(elements.getUnsafe(i), ops)
- .mapError(it -> new AtIndex(index, it));
- errors.addAll(result.errors());
- result.valueOrPartial().ifPresent(acc::add);
- }
- return Result.<List<T>, JsonLikeError>ok(acc).appendErrors(errors);
- });
- }
- };
- }
-
- default JsonCodec<T, Format> named(String name) {
- return new JsonCodec<>() {
- @Override
- public Result<? extends T, JsonLikeError> decode(Format format, JsonLikeOperations<Format> ops) {
- return JsonCodec.this.decode(format, ops).mapError(it -> new NamedObject(name, it));
- }
-
- @Override
- public Result<? extends Format, JsonLikeError> encode(T data, JsonLikeOperations<Format> ops) {
- return JsonCodec.this.encode(data, ops).mapError(it -> new NamedObject(name, it));
- }
- };
- }
-
- default MapCodec<T, Format> fieldOf(String key) {
- return new MapCodec<>() {
- @Override
- public Result<T, JsonLikeError> decode(RecordView<Format> record, JsonLikeOperations<Format> ops) {
- return record.get(key)
- .map(element -> Result.<T, JsonLikeError>cast(
- JsonCodec.this.decode(element, ops)
- .mapError(it -> new AtField(key, it))))
- .orElseGet(() -> Result.fail(new MissingKey(key)));
- }
-
- @Override
- public Result<RecordBuilder<Format>, JsonLikeError> encode(T value, JsonLikeOperations<Format> ops) {
- var record = ops.createObject();
- return Result.<Format, JsonLikeError>cast(JsonCodec.this.encode(value, ops))
- .<JsonLikeError>mapError(it -> new AtField(key, it))
- .flatMap(json -> Result.cast(record.add(key, json).map(unit -> record)));
- }
-
- };
- }
-}