MCPcopy Create free account
hub / github.com/pboettch/json-schema-validator / array

Class array

src/json-validator.cpp:1199–1316  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1197};
1198
1199class array : public schema
1200{
1201 std::pair<bool, size_t> maxItems_{false, 0};
1202 std::pair<bool, size_t> minItems_{false, 0};
1203 bool uniqueItems_ = false;
1204
1205 std::shared_ptr<schema> items_schema_;
1206
1207 std::vector<std::shared_ptr<schema>> items_;
1208 std::shared_ptr<schema> additionalItems_;
1209
1210 std::shared_ptr<schema> contains_;
1211
1212 void validate(const json::json_pointer &ptr, const json &instance, json_patch &patch, error_handler &e) const override
1213 {
1214 if (maxItems_.first && instance.size() > maxItems_.second)
1215 e.error(ptr, instance, "array has too many items");
1216
1217 if (minItems_.first && instance.size() < minItems_.second)
1218 e.error(ptr, instance, "array has too few items");
1219
1220 if (uniqueItems_) {
1221 for (auto it = instance.cbegin(); it != instance.cend(); ++it) {
1222 auto v = std::find(it + 1, instance.end(), *it);
1223 if (v != instance.end())
1224 e.error(ptr, instance, "items have to be unique for this array");
1225 }
1226 }
1227
1228 size_t index = 0;
1229 if (items_schema_)
1230 for (auto &i : instance) {
1231 items_schema_->validate(ptr / index, i, patch, e);
1232 index++;
1233 }
1234 else {
1235 auto item = items_.cbegin();
1236 for (auto &i : instance) {
1237 std::shared_ptr<schema> item_validator;
1238 if (item == items_.cend())
1239 item_validator = additionalItems_;
1240 else {
1241 item_validator = *item;
1242 item++;
1243 }
1244
1245 if (!item_validator)
1246 break;
1247
1248 item_validator->validate(ptr / index, i, patch, e);
1249 }
1250 }
1251
1252 if (contains_) {
1253 bool contained = false;
1254 for (auto &item : instance) {
1255 first_error_handler local_e;
1256 contains_->validate(ptr, item, patch, local_e);

Callers 1

json_patchClass · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected