|
|
@@ -353,8 +353,36 @@ public:
|
|
|
return required.empty();
|
|
|
}
|
|
|
|
|
|
- Status visit(constraint::UnevaluatedItemsConstraint const & cons) const { throw; }
|
|
|
- Status visit(constraint::UnevaluatedPropertiesConstraint const & cons) const { throw; }
|
|
|
+ Status visit(constraint::UnevaluatedItemsConstraint const & cons) const {
|
|
|
+ NOOP_UNLESS_TYPE(Array);
|
|
|
+
|
|
|
+ Status rval = Status::Accept;
|
|
|
+ auto array = document_.as_array();
|
|
|
+ for (size_t i = 0; i < array.size(); ++i) {
|
|
|
+ if (not result_->visited_items.contains(i)) {
|
|
|
+ rval &= validate_subschema_for(cons.subschema, array[i]);
|
|
|
+ }
|
|
|
+ // TODO(samjaffe): Special Rule
|
|
|
+ if (!rval && result_ == nullptr) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Status visit(constraint::UnevaluatedPropertiesConstraint const & cons) const {
|
|
|
+ NOOP_UNLESS_TYPE(Object);
|
|
|
+
|
|
|
+ Status rval = Status::Accept;
|
|
|
+ for (auto const & [key, elem] : document_.as_object()) {
|
|
|
+ if (not result_->visited_properties.contains(key)) {
|
|
|
+ rval &= validate_subschema_for(cons.subschema, elem);
|
|
|
+ }
|
|
|
+ // TODO(samjaffe): Special Rule
|
|
|
+ if (!rval && result_ == nullptr) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
Status validate() const {
|
|
|
if (schema_.rejects_all()) {
|