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;
/**
* Something that knows how to validate itself
*/
public interface Validatable {
void validate() throws InvalidXMLException;
default Validatable offeringNode(@Nullable Node node) {
if(node == null) return this;
return () -> {
try {
validate();
} catch(InvalidXMLException e) {
e.offerNode(node);
throw e;
}
};
}
default Validatable offeringNode(Supplier<Node> supplier) {
return () -> {
try {
validate();
} catch(InvalidXMLException e) {
e.offerNode(supplier.get());
throw e;
}
};
}
}