in baremaps-core/src/main/java/org/apache/baremaps/vectortile/expression/Expressions.java [465:500]
public Expression deserializeJsonArray(JsonNode node) {
var arrayList = new ArrayList<JsonNode>();
node.elements().forEachRemaining(arrayList::add);
return switch (arrayList.get(0).asText()) {
case "literal" -> new Literal(arrayList.get(1).asText());
case "get" -> new Get(arrayList.get(1).asText());
case "has" -> new Has(arrayList.get(1).asText());
case ">" -> new Greater(deserializeJsonNode(arrayList.get(1)),
deserializeJsonNode(arrayList.get(2)));
case ">=" -> new GreaterOrEqual(deserializeJsonNode(arrayList.get(1)),
deserializeJsonNode(arrayList.get(2)));
case "<" -> new Less(deserializeJsonNode(arrayList.get(1)),
deserializeJsonNode(arrayList.get(2)));
case "<=" -> new LessOrEqual(deserializeJsonNode(arrayList.get(1)),
deserializeJsonNode(arrayList.get(2)));
case "==" -> new Equal(deserializeJsonNode(arrayList.get(1)),
deserializeJsonNode(arrayList.get(2)));
case "!=" -> new NotEqual(deserializeJsonNode(arrayList.get(1)),
deserializeJsonNode(arrayList.get(2)));
case "!" -> new Not(deserializeJsonNode(arrayList.get(1)));
case "all" -> new All(arrayList.stream().skip(1).map(this::deserializeJsonNode).toList());
case "any" -> new Any(arrayList.stream().skip(1).map(this::deserializeJsonNode).toList());
case "case" -> new Case(deserializeJsonNode(arrayList.get(1)),
deserializeJsonNode(arrayList.get(2)),
deserializeJsonNode(arrayList.get(3)));
case "coalesce" -> new Coalesce(
arrayList.stream().skip(1).map(this::deserializeJsonNode).toList());
case "match" -> new Match(
deserializeJsonNode(arrayList.get(1)), arrayList.subList(2, arrayList.size() - 1)
.stream().map(this::deserializeJsonNode).toList(),
deserializeJsonNode(arrayList.get(arrayList.size() - 1)));
case "within" -> new Within(deserializeJsonNode(arrayList.get(1)));
default -> throw new IllegalArgumentException(
"Unknown expression: " + arrayList.get(0).asText());
};
}