
com.github.leeonky.dal.format.Value Maven / Gradle / Ivy
package com.github.leeonky.dal.format;
import com.github.leeonky.dal.runtime.Data;
import com.github.leeonky.dal.runtime.IllegalFieldException;
import com.github.leeonky.util.BeanClass;
import com.github.leeonky.util.function.Comparator;
import java.util.Objects;
import static java.lang.String.format;
public interface Value extends Type {
static Value equalTo(T value) {
return new Value() {
@Override
public boolean verify(T actual) {
return Objects.equals(value, actual);
}
@Override
public String errorMessage(String field, Object actual) {
return format("Expecting field `%s` [%s] to be equal to [%s], but was not.", field, actual, value);
}
};
}
static Value nullReference() {
return new Value() {
@Override
public boolean verify(T actual) {
return actual == null;
}
@Override
public String errorMessage(String field, Object actual) {
return format("Expecting field `%s` [%s] to be null, but was not.", field, actual);
}
};
}
static > Value lessThan(T value) {
return compare(value, Comparator.lessThan(0), "less than");
}
static > Value greaterThan(T value) {
return compare(value, Comparator.greaterThan(0), "greater than");
}
static > Value lessOrEqualTo(T value) {
return compare(value, Comparator.lessOrEqualTo(0), "less or equal to");
}
static > Value greaterOrEqualTo(T value) {
return compare(value, Comparator.greaterOrEqualTo(0), "greater or equal to");
}
static > Value compare(T value, Comparator comparator, String valueName) {
return new ComparableValue<>(comparator, value, valueName);
}
@Override
boolean verify(T actual);
@Override
default String errorMessage(String field, Object actual) {
return format("Field `%s` is invalid", field);
}
@SuppressWarnings("unchecked")
default T convertAs(Data actual, BeanClass> type) {
if (type == null)
throw new IllegalFieldException();
return (T) actual.convert(type.getType()).instance();
}
class ComparableValue> extends ComparableType implements Value {
public ComparableValue(Comparator comparator, T value, String valueName) {
super(comparator, value, valueName);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy