diff options
Diffstat (limited to 'src/main/java/moe/nea/pcj/json/BasicCodecs.java')
-rw-r--r-- | src/main/java/moe/nea/pcj/json/BasicCodecs.java | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/main/java/moe/nea/pcj/json/BasicCodecs.java b/src/main/java/moe/nea/pcj/json/BasicCodecs.java new file mode 100644 index 0000000..8f957f9 --- /dev/null +++ b/src/main/java/moe/nea/pcj/json/BasicCodecs.java @@ -0,0 +1,51 @@ +package moe.nea.pcj.json; + +import moe.nea.pcj.Result; + +public class BasicCodecs<Format> { + protected BasicCodecs() {} + + public static <Format> BasicCodecs<Format> create() { + return new BasicCodecs<>(); + } + + public final JsonCodec<String, Format> STRING = new JsonCodec<>() { + @Override + public Result<String, ? extends JsonLikeError> decode(Format format, JsonLikeOperations<Format> ops) { + return ops.getString(format); + } + + @Override + public Result<Format, ? extends JsonLikeError> encode(String data, JsonLikeOperations<Format> ops) { + return Result.ok(ops.createString(data)); + } + }; + + public final JsonCodec<Float, Format> FLOAT = new JsonCodec<Float, Format>() { + @Override + public Result<? extends Float, ? extends JsonLikeError> decode(Format format, JsonLikeOperations<Format> ops) { + return ops.getNumeric(format).map(Number::floatValue); + } + + @Override + public Result<? extends Format, ? extends JsonLikeError> encode(Float data, JsonLikeOperations<Format> ops) { + return Result.ok(ops.createNumeric(data)); + } + }; + + public final JsonCodec<Integer, Format> INTEGER = new JsonCodec<>() { + @Override + public Result<? extends Integer, ? extends JsonLikeError> decode(Format format, JsonLikeOperations<Format> ops) { + return ops.getNumeric(format).map(Number::intValue); // TODO: filter for valid ints + } + + @Override + public Result<? extends Format, ? extends JsonLikeError> encode(Integer data, JsonLikeOperations<Format> ops) { + return Result.ok(ops.createNumeric(data)); + } + }; + + public <T> JsonCodec<T, Format> objectCodec() { + + } +}
\ No newline at end of file |