presto-main/src/main/java/io/prestosql/metadata/TypeVariableConstraint.java/TypeVariableConstraint/TypeVariableConstraint
class TypeVariableConstraint:    @JsonCreator
    public TypeVariableConstraint(
            @JsonProperty("name") String name,
            @JsonProperty("comparableRequired") boolean comparableRequired,
            @JsonProperty("orderableRequired") boolean orderableRequired,
            @JsonProperty("variadicBound") @Nullable String variadicBound,
            @JsonProperty("castableTo") Set<TypeSignature> castableTo,
            @JsonProperty("castableFrom") Set<TypeSignature> castableFrom)
    {
        this.name = name;
        this.comparableRequired = comparableRequired;
        this.orderableRequired = orderableRequired;
        this.variadicBound = variadicBound;
        if (variadicBound != null && !variadicBound.equalsIgnoreCase("row")) {
            throw new IllegalArgumentException("variadicBound must be row but is " + variadicBound);
        }
        this.castableTo = ImmutableSet.copyOf(requireNonNull(castableTo, "castableTo is null"));
        this.castableFrom = ImmutableSet.copyOf(requireNonNull(castableFrom, "castableFrom is null"));
    }