
net.hamnaberg.json.Codecs Maven / Gradle / Ivy
package net.hamnaberg.json;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Codecs {
public static final JsonCodec StringCodec = new JsonCodec() {
@Override
public Optional toJson(String value) {
return Optional.of(Json.jString(value));
}
@Override
public Optional fromJson(Json.JValue value) {
return value.asString();
}
};
public static final JsonCodec numberCodec = new JsonCodec() {
@Override
public Optional toJson(Number value) {
return Optional.of(Json.jNumber(value));
}
@Override
public Optional fromJson(Json.JValue value) {
return value.asBigDecimal().map(v -> (Number) v);
}
};
public static final JsonCodec longCodec = new JsonCodec() {
@Override
public Optional toJson(Long value) {
return Optional.of(Json.jNumber(value));
}
@Override
public Optional fromJson(Json.JValue value) {
return value.asJsonNumber().map(Json.JNumber::asLong);
}
};
public static final JsonCodec doubleCodec = new JsonCodec() {
@Override
public Optional toJson(Double value) {
return Optional.of(Json.jNumber(value));
}
@Override
public Optional fromJson(Json.JValue value) {
return value.asJsonNumber().map(Json.JNumber::asDouble);
}
};
public static final JsonCodec intCodec = new JsonCodec() {
@Override
public Optional toJson(Integer value) {
return Optional.of(Json.jNumber(value));
}
@Override
public Optional fromJson(Json.JValue value) {
return value.asJsonNumber().map(Json.JNumber::asInt);
}
};
public static final JsonCodec booleanCodec = new JsonCodec() {
@Override
public Optional toJson(Boolean value) {
return Optional.of(Json.jBoolean(value));
}
@Override
public Optional fromJson(Json.JValue value) {
return value.asBoolean();
}
};
public static JsonCodec nullCodec() {
return new JsonCodec() {
@Override
public Optional toJson(A value) {
return Optional.of(Json.jNull());
}
@Override
public Optional fromJson(Json.JValue value) {
return Optional.empty();
}
};
}
public static JsonCodec> listCodec(JsonCodec codec) {
return new JsonCodec>() {
@Override
public Optional> fromJson(Json.JValue value) {
return value.asJsonArray().map(j -> j.mapOpt(codec::fromJson));
}
@Override
public Optional toJson(List value) {
return Optional.of(Json.jArray(value.stream().flatMap(a -> {
Optional jv = codec.toJson(a);
return jv.isPresent() ? Stream.of(jv.get()) : Stream.empty();
}).collect(Collectors.toList())));
}
};
}
public static JsonCodec> optionalCodec(JsonCodec codec) {
return new JsonCodec>() {
@Override
public Optional> fromJson(Json.JValue value) {
return Optional.of(codec.fromJson(value));
}
@Override
public Optional toJson(Optional value) {
return value.flatMap(v -> codec.toJson(v));
}
};
}
public static javaslang.Function1> codec1(Iso> iso, JsonCodec c1) {
return (n1) -> new JsonCodec() {
@Override
public Optional toJson(TT value) {
javaslang.Tuple1 tuple = iso.get(value);
return c1.toJson(tuple._1).flatMap(j1 -> Optional.of(Json.jObject(Json.entry(n1, j1))));
}
@Override
public Optional fromJson(Json.JValue value) {
Json.JObject object = value.asJsonObjectOrEmpty();
Optional oa = object.getAs(n1, c1::fromJson);
return oa.flatMap(a -> Optional.of(iso.reverseGet(new javaslang.Tuple1<>(a))));
}
};
}
public static javaslang.Function2> codec2(Iso> iso, JsonCodec c1, JsonCodec c2) {
return (n1, n2) -> new JsonCodec() {
@Override
public Optional toJson(TT value) {
javaslang.Tuple2 tuple = iso.get(value);
return c1.toJson(tuple._1).flatMap(j1 -> c2.toJson(tuple._2).flatMap(j2 -> Optional.of(Json.jObject(Json.entry(n1, j1), Json.entry(n2, j2)))));
}
@Override
public Optional fromJson(Json.JValue value) {
Json.JObject object = value.asJsonObjectOrEmpty();
Optional oa = object.getAs(n1, c1::fromJson);
Optional ob = object.getAs(n2, c2::fromJson);
return oa.flatMap(a -> ob.flatMap(b -> Optional.of(iso.reverseGet(new javaslang.Tuple2<>(a, b)))));
}
};
}
public static javaslang.Function3> codec3(Iso> iso, JsonCodec c1, JsonCodec c2, JsonCodec c3) {
return (n1, n2, n3) -> new JsonCodec() {
@Override
public Optional toJson(TT value) {
javaslang.Tuple3 tuple = iso.get(value);
return c1.toJson(tuple._1).flatMap(j1 -> c2.toJson(tuple._2).flatMap(j2 -> c3.toJson(tuple._3).flatMap(j3 -> Optional.of(Json.jObject(Json.entry(n1, j1), Json.entry(n2, j2), Json.entry(n3, j3))))));
}
@Override
public Optional fromJson(Json.JValue value) {
Json.JObject object = value.asJsonObjectOrEmpty();
Optional oa = object.getAs(n1, c1::fromJson);
Optional ob = object.getAs(n2, c2::fromJson);
Optional oc = object.getAs(n3, c3::fromJson);
return oa.flatMap(a -> ob.flatMap(b -> oc.flatMap(c -> Optional.of(iso.reverseGet(new javaslang.Tuple3<>(a, b, c))))));
}
};
}
public static javaslang.Function4> codec4(Iso> iso, JsonCodec c1, JsonCodec c2, JsonCodec c3, JsonCodec c4) {
return (n1, n2, n3, n4) -> new JsonCodec() {
@Override
public Optional toJson(TT value) {
javaslang.Tuple4 tuple = iso.get(value);
return c1.toJson(tuple._1).flatMap(j1 -> c2.toJson(tuple._2).flatMap(j2 -> c3.toJson(tuple._3).flatMap(j3 -> c4.toJson(tuple._4).flatMap(j4 -> Optional.of(Json.jObject(Json.entry(n1, j1), Json.entry(n2, j2), Json.entry(n3, j3), Json.entry(n4, j4)))))));
}
@Override
public Optional fromJson(Json.JValue value) {
Json.JObject object = value.asJsonObjectOrEmpty();
Optional oa = object.getAs(n1, c1::fromJson);
Optional ob = object.getAs(n2, c2::fromJson);
Optional oc = object.getAs(n3, c3::fromJson);
Optional od = object.getAs(n4, c4::fromJson);
return oa.flatMap(a -> ob.flatMap(b -> oc.flatMap(c -> od.flatMap(d -> Optional.of(iso.reverseGet(new javaslang.Tuple4<>(a, b, c, d)))))));
}
};
}
public static javaslang.Function5> codec5(Iso> iso, JsonCodec c1, JsonCodec c2, JsonCodec c3, JsonCodec c4, JsonCodec c5) {
return (n1, n2, n3, n4, n5) -> new JsonCodec() {
@Override
public Optional toJson(TT value) {
javaslang.Tuple5 tuple = iso.get(value);
return c1.toJson(tuple._1).flatMap(j1 -> c2.toJson(tuple._2).flatMap(j2 -> c3.toJson(tuple._3).flatMap(j3 -> c4.toJson(tuple._4).flatMap(j4 -> c5.toJson(tuple._5).flatMap(j5 -> Optional.of(Json.jObject(Json.entry(n1, j1), Json.entry(n2, j2), Json.entry(n3, j3), Json.entry(n4, j4), Json.entry(n5, j5))))))));
}
@Override
public Optional fromJson(Json.JValue value) {
Json.JObject object = value.asJsonObjectOrEmpty();
Optional oa = object.getAs(n1, c1::fromJson);
Optional ob = object.getAs(n2, c2::fromJson);
Optional oc = object.getAs(n3, c3::fromJson);
Optional od = object.getAs(n4, c4::fromJson);
Optional oe = object.getAs(n5, c5::fromJson);
return oa.flatMap(a -> ob.flatMap(b -> oc.flatMap(c -> od.flatMap(d -> oe.flatMap(e -> Optional.of(iso.reverseGet(new javaslang.Tuple5<>(a, b, c, d, e))))))));
}
};
}
public static javaslang.Function6> codec6(Iso> iso, JsonCodec c1, JsonCodec c2, JsonCodec c3, JsonCodec c4, JsonCodec c5, JsonCodec c6) {
return (n1, n2, n3, n4, n5, n6) -> new JsonCodec() {
@Override
public Optional toJson(TT value) {
javaslang.Tuple6 tuple = iso.get(value);
return c1.toJson(tuple._1).flatMap(j1 -> c2.toJson(tuple._2).flatMap(j2 -> c3.toJson(tuple._3).flatMap(j3 -> c4.toJson(tuple._4).flatMap(j4 -> c5.toJson(tuple._5).flatMap(j5 -> c6.toJson(tuple._6).flatMap(j6 -> Optional.of(Json.jObject(Json.entry(n1, j1), Json.entry(n2, j2), Json.entry(n3, j3), Json.entry(n4, j4), Json.entry(n5, j5), Json.entry(n6, j6)))))))));
}
@Override
public Optional fromJson(Json.JValue value) {
Json.JObject object = value.asJsonObjectOrEmpty();
Optional oa = object.getAs(n1, c1::fromJson);
Optional ob = object.getAs(n2, c2::fromJson);
Optional oc = object.getAs(n3, c3::fromJson);
Optional od = object.getAs(n4, c4::fromJson);
Optional oe = object.getAs(n5, c5::fromJson);
Optional of = object.getAs(n6, c6::fromJson);
return oa.flatMap(a -> ob.flatMap(b -> oc.flatMap(c -> od.flatMap(d -> oe.flatMap(e -> of.flatMap(f -> Optional.of(iso.reverseGet(new javaslang.Tuple6<>(a, b, c, d, e, f)))))))));
}
};
}
public static javaslang.Function7> codec7(Iso> iso, JsonCodec c1, JsonCodec c2, JsonCodec c3, JsonCodec c4, JsonCodec c5, JsonCodec c6, JsonCodec c7) {
return (n1, n2, n3, n4, n5, n6, n7) -> new JsonCodec() {
@Override
public Optional toJson(TT value) {
javaslang.Tuple7 tuple = iso.get(value);
return c1.toJson(tuple._1).flatMap(j1 -> c2.toJson(tuple._2).flatMap(j2 -> c3.toJson(tuple._3).flatMap(j3 -> c4.toJson(tuple._4).flatMap(j4 -> c5.toJson(tuple._5).flatMap(j5 -> c6.toJson(tuple._6).flatMap(j6 -> c7.toJson(tuple._7).flatMap(j7 -> Optional.of(Json.jObject(Json.entry(n1, j1), Json.entry(n2, j2), Json.entry(n3, j3), Json.entry(n4, j4), Json.entry(n5, j5), Json.entry(n6, j6), Json.entry(n7, j7))))))))));
}
@Override
public Optional fromJson(Json.JValue value) {
Json.JObject object = value.asJsonObjectOrEmpty();
Optional oa = object.getAs(n1, c1::fromJson);
Optional ob = object.getAs(n2, c2::fromJson);
Optional oc = object.getAs(n3, c3::fromJson);
Optional od = object.getAs(n4, c4::fromJson);
Optional oe = object.getAs(n5, c5::fromJson);
Optional of = object.getAs(n6, c6::fromJson);
Optional og = object.getAs(n7, c7::fromJson);
return oa.flatMap(a -> ob.flatMap(b -> oc.flatMap(c -> od.flatMap(d -> oe.flatMap(e -> of.flatMap(f -> og.flatMap(g -> Optional.of(iso.reverseGet(new javaslang.Tuple7<>(a, b, c, d, e, f, g))))))))));
}
};
}
public static javaslang.Function8> codec8(Iso> iso, JsonCodec c1, JsonCodec c2, JsonCodec c3, JsonCodec c4, JsonCodec c5, JsonCodec c6, JsonCodec c7, JsonCodec c8) {
return (n1, n2, n3, n4, n5, n6, n7, n8) -> new JsonCodec() {
@Override
public Optional toJson(TT value) {
javaslang.Tuple8 tuple = iso.get(value);
return c1.toJson(tuple._1).flatMap(j1 -> c2.toJson(tuple._2).flatMap(j2 -> c3.toJson(tuple._3).flatMap(j3 -> c4.toJson(tuple._4).flatMap(j4 -> c5.toJson(tuple._5).flatMap(j5 -> c6.toJson(tuple._6).flatMap(j6 -> c7.toJson(tuple._7).flatMap(j7 -> c8.toJson(tuple._8).flatMap(j8 -> Optional.of(Json.jObject(Json.entry(n1, j1), Json.entry(n2, j2), Json.entry(n3, j3), Json.entry(n4, j4), Json.entry(n5, j5), Json.entry(n6, j6), Json.entry(n7, j7), Json.entry(n8, j8)))))))))));
}
@Override
public Optional fromJson(Json.JValue value) {
Json.JObject object = value.asJsonObjectOrEmpty();
Optional oa = object.getAs(n1, c1::fromJson);
Optional ob = object.getAs(n2, c2::fromJson);
Optional oc = object.getAs(n3, c3::fromJson);
Optional od = object.getAs(n4, c4::fromJson);
Optional oe = object.getAs(n5, c5::fromJson);
Optional of = object.getAs(n6, c6::fromJson);
Optional og = object.getAs(n7, c7::fromJson);
Optional oh = object.getAs(n8, c8::fromJson);
return oa.flatMap(a -> ob.flatMap(b -> oc.flatMap(c -> od.flatMap(d -> oe.flatMap(e -> of.flatMap(f -> og.flatMap(g -> oh.flatMap(h -> Optional.of(iso.reverseGet(new javaslang.Tuple8<>(a, b, c, d, e, f, g, h)))))))))));
}
};
}
public static javaslang.Function9> codec9(Iso> iso, JsonCodec c1, JsonCodec c2, JsonCodec c3, JsonCodec c4, JsonCodec c5, JsonCodec c6, JsonCodec c7, JsonCodec c8, JsonCodec c9) {
return (n1, n2, n3, n4, n5, n6, n7, n8, n9) -> new JsonCodec() {
@Override
public Optional toJson(TT value) {
javaslang.Tuple9 tuple = iso.get(value);
return c1.toJson(tuple._1).flatMap(j1 -> c2.toJson(tuple._2).flatMap(j2 -> c3.toJson(tuple._3).flatMap(j3 -> c4.toJson(tuple._4).flatMap(j4 -> c5.toJson(tuple._5).flatMap(j5 -> c6.toJson(tuple._6).flatMap(j6 -> c7.toJson(tuple._7).flatMap(j7 -> c8.toJson(tuple._8).flatMap(j8 -> c9.toJson(tuple._9).flatMap(j9 -> Optional.of(Json.jObject(Json.entry(n1, j1), Json.entry(n2, j2), Json.entry(n3, j3), Json.entry(n4, j4), Json.entry(n5, j5), Json.entry(n6, j6), Json.entry(n7, j7), Json.entry(n8, j8), Json.entry(n9, j9))))))))))));
}
@Override
public Optional fromJson(Json.JValue value) {
Json.JObject object = value.asJsonObjectOrEmpty();
Optional oa = object.getAs(n1, c1::fromJson);
Optional ob = object.getAs(n2, c2::fromJson);
Optional oc = object.getAs(n3, c3::fromJson);
Optional od = object.getAs(n4, c4::fromJson);
Optional oe = object.getAs(n5, c5::fromJson);
Optional of = object.getAs(n6, c6::fromJson);
Optional og = object.getAs(n7, c7::fromJson);
Optional oh = object.getAs(n8, c8::fromJson);
Optional oi = object.getAs(n9, c9::fromJson);
return oa.flatMap(a -> ob.flatMap(b -> oc.flatMap(c -> od.flatMap(d -> oe.flatMap(e -> of.flatMap(f -> og.flatMap(g -> oh.flatMap(h -> oi.flatMap(i -> Optional.of(iso.reverseGet(new javaslang.Tuple9<>(a, b, c, d, e, f, g, h, i))))))))))));
}
};
}
public static javaslang.Function10> codec10(Iso> iso, JsonCodec c1, JsonCodec c2, JsonCodec c3, JsonCodec c4, JsonCodec c5, JsonCodec c6, JsonCodec c7, JsonCodec c8, JsonCodec c9, JsonCodec c10) {
return (n1, n2, n3, n4, n5, n6, n7, n8, n9, n10) -> new JsonCodec() {
@Override
public Optional toJson(TT value) {
javaslang.Tuple10 tuple = iso.get(value);
return c1.toJson(tuple._1).flatMap(j1 -> c2.toJson(tuple._2).flatMap(j2 -> c3.toJson(tuple._3).flatMap(j3 -> c4.toJson(tuple._4).flatMap(j4 -> c5.toJson(tuple._5).flatMap(j5 -> c6.toJson(tuple._6).flatMap(j6 -> c7.toJson(tuple._7).flatMap(j7 -> c8.toJson(tuple._8).flatMap(j8 -> c9.toJson(tuple._9).flatMap(j9 -> c10.toJson(tuple._10).flatMap(j10 -> Optional.of(Json.jObject(Json.entry(n1, j1), Json.entry(n2, j2), Json.entry(n3, j3), Json.entry(n4, j4), Json.entry(n5, j5), Json.entry(n6, j6), Json.entry(n7, j7), Json.entry(n8, j8), Json.entry(n9, j9), Json.entry(n10, j10)))))))))))));
}
@Override
public Optional fromJson(Json.JValue value) {
Json.JObject object = value.asJsonObjectOrEmpty();
Optional oa = object.getAs(n1, c1::fromJson);
Optional ob = object.getAs(n2, c2::fromJson);
Optional oc = object.getAs(n3, c3::fromJson);
Optional od = object.getAs(n4, c4::fromJson);
Optional oe = object.getAs(n5, c5::fromJson);
Optional of = object.getAs(n6, c6::fromJson);
Optional og = object.getAs(n7, c7::fromJson);
Optional oh = object.getAs(n8, c8::fromJson);
Optional oi = object.getAs(n9, c9::fromJson);
Optional oj = object.getAs(n10, c10::fromJson);
return oa.flatMap(a -> ob.flatMap(b -> oc.flatMap(c -> od.flatMap(d -> oe.flatMap(e -> of.flatMap(f -> og.flatMap(g -> oh.flatMap(h -> oi.flatMap(i -> oj.flatMap(j -> Optional.of(iso.reverseGet(new javaslang.Tuple10<>(a, b, c, d, e, f, g, h, i, j)))))))))))));
}
};
}
public static javaslang.Function11> codec11(Iso> iso, JsonCodec c1, JsonCodec c2, JsonCodec c3, JsonCodec c4, JsonCodec c5, JsonCodec c6, JsonCodec c7, JsonCodec c8, JsonCodec c9, JsonCodec c10, JsonCodec c11) {
return (n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11) -> new JsonCodec() {
@Override
public Optional toJson(TT value) {
javaslang.Tuple11 tuple = iso.get(value);
return c1.toJson(tuple._1).flatMap(j1 -> c2.toJson(tuple._2).flatMap(j2 -> c3.toJson(tuple._3).flatMap(j3 -> c4.toJson(tuple._4).flatMap(j4 -> c5.toJson(tuple._5).flatMap(j5 -> c6.toJson(tuple._6).flatMap(j6 -> c7.toJson(tuple._7).flatMap(j7 -> c8.toJson(tuple._8).flatMap(j8 -> c9.toJson(tuple._9).flatMap(j9 -> c10.toJson(tuple._10).flatMap(j10 -> c11.toJson(tuple._11).flatMap(j11 -> Optional.of(Json.jObject(Json.entry(n1, j1), Json.entry(n2, j2), Json.entry(n3, j3), Json.entry(n4, j4), Json.entry(n5, j5), Json.entry(n6, j6), Json.entry(n7, j7), Json.entry(n8, j8), Json.entry(n9, j9), Json.entry(n10, j10), Json.entry(n11, j11))))))))))))));
}
@Override
public Optional fromJson(Json.JValue value) {
Json.JObject object = value.asJsonObjectOrEmpty();
Optional oa = object.getAs(n1, c1::fromJson);
Optional ob = object.getAs(n2, c2::fromJson);
Optional oc = object.getAs(n3, c3::fromJson);
Optional od = object.getAs(n4, c4::fromJson);
Optional oe = object.getAs(n5, c5::fromJson);
Optional of = object.getAs(n6, c6::fromJson);
Optional og = object.getAs(n7, c7::fromJson);
Optional oh = object.getAs(n8, c8::fromJson);
Optional oi = object.getAs(n9, c9::fromJson);
Optional oj = object.getAs(n10, c10::fromJson);
Optional ok = object.getAs(n11, c11::fromJson);
return oa.flatMap(a -> ob.flatMap(b -> oc.flatMap(c -> od.flatMap(d -> oe.flatMap(e -> of.flatMap(f -> og.flatMap(g -> oh.flatMap(h -> oi.flatMap(i -> oj.flatMap(j -> ok.flatMap(k -> Optional.of(iso.reverseGet(new javaslang.Tuple11<>(a, b, c, d, e, f, g, h, i, j, k))))))))))))));
}
};
}
public static