summaryrefslogtreecommitdiff
path: root/src/main/java/moe/nea/pcj/json/BasicCodecs.java
blob: 565711dd49d7c54f12b2cbe7200dcef1e627f3fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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));
		}
	};
}