package tc.oc.pgm.xml.validate;
import java.util.function.Supplier;
import javax.annotation.Nullable;
import tc.oc.pgm.xml.InvalidXMLException;
import tc.oc.pgm.xml.Node;
@FunctionalInterface
public interface LocatedValidation<T> {
void validate(T value) throws InvalidXMLException;
default Validatable bind(T value) {
return () -> validate(value);
}
default Validatable compose(Supplier<? extends T> supplier) {
return () -> validate(supplier.get());
}
default LocatedValidation<T> offeringNode(@Nullable Node node) {
if(node == null) return this;
return value -> {
try {
validate(value);
} catch(InvalidXMLException e) {
e.offerNode(node);
throw e;
}
};
}
}