MQTTSuite
Loading...
Searching...
No Matches
anonymous_namespace{json-validator.cpp}::array Class Reference
Inheritance diagram for anonymous_namespace{json-validator.cpp}::array:
Collaboration diagram for anonymous_namespace{json-validator.cpp}::array:

Public Member Functions

 array (json &sch, root_schema *root, const std::vector< nlohmann::json_uri > &uris)
 array (json &sch, root_schema *root, const std::vector< nlohmann::json_uri > &uris)
Public Member Functions inherited from anonymous_namespace{json-validator.cpp}::schema
virtual ~schema ()=default
 schema (root_schema *root)
virtual const jsondefault_value (const json::json_pointer &, const json &, error_handler &) const
void set_default_value (const json &v)
virtual ~schema ()=default
 schema (root_schema *root)
virtual const jsondefault_value (const json::json_pointer &, const json &, error_handler &) const
void set_default_value (const json &v)

Private Member Functions

void validate (const json::json_pointer &ptr, const json &instance, json_patch &patch, error_handler &e) const override
void validate (const json::json_pointer &ptr, const json &instance, json_patch &patch, error_handler &e) const override

Private Attributes

std::pair< bool, size_t > maxItems_ {false, 0}
std::pair< bool, size_t > minItems_ {false, 0}
bool uniqueItems_ = false
std::shared_ptr< schemaitems_schema_
std::vector< std::shared_ptr< schema > > items_
std::shared_ptr< schemaadditionalItems_
std::shared_ptr< schemacontains_

Additional Inherited Members

Static Public Member Functions inherited from anonymous_namespace{json-validator.cpp}::schema
static std::shared_ptr< schemamake (json &schema, root_schema *root, const std::vector< std::string > &key, std::vector< nlohmann::json_uri > uris)
static std::shared_ptr< schemamake (json &schema, root_schema *root, const std::vector< std::string > &key, std::vector< nlohmann::json_uri > uris)
Protected Member Functions inherited from anonymous_namespace{json-validator.cpp}::schema
virtual std::shared_ptr< schemamake_for_default_ (std::shared_ptr<::schema > &, root_schema *, std::vector< nlohmann::json_uri > &, nlohmann::json &) const
virtual std::shared_ptr< schemamake_for_default_ (std::shared_ptr<::schema > &, root_schema *, std::vector< nlohmann::json_uri > &, nlohmann::json &) const
Protected Attributes inherited from anonymous_namespace{json-validator.cpp}::schema
root_schemaroot_
json default_value_ = nullptr

Detailed Description

Definition at line 1199 of file json-validator.cpp.

Constructor & Destructor Documentation

◆ array() [1/2]

anonymous_namespace{json-validator.cpp}::array::array ( json & sch,
root_schema * root,
const std::vector< nlohmann::json_uri > & uris )
inline

Definition at line 1268 of file json-validator.cpp.

1269 : schema(root)
1270 {
1271 auto attr = sch.find("maxItems");
1272 if (attr != sch.end()) {
1273 maxItems_ = {true, attr.value().get<size_t>()};
1274 sch.erase(attr);
1275 }
1276
1277 attr = sch.find("minItems");
1278 if (attr != sch.end()) {
1279 minItems_ = {true, attr.value().get<size_t>()};
1280 sch.erase(attr);
1281 }
1282
1283 attr = sch.find("uniqueItems");
1284 if (attr != sch.end()) {
1285 uniqueItems_ = attr.value().get<bool>();
1286 sch.erase(attr);
1287 }
1288
1289 attr = sch.find("items");
1290 if (attr != sch.end()) {
1291
1292 if (attr.value().type() == json::value_t::array) {
1293 size_t c = 0;
1294 for (auto &subsch : attr.value())
1295 items_.push_back(schema::make(subsch, root, {"items", std::to_string(c++)}, uris));
1296
1297 auto attr_add = sch.find("additionalItems");
1298 if (attr_add != sch.end()) {
1299 additionalItems_ = schema::make(attr_add.value(), root, {"additionalItems"}, uris);
1300 sch.erase(attr_add);
1301 }
1302
1303 } else if (attr.value().type() == json::value_t::object ||
1304 attr.value().type() == json::value_t::boolean)
1305 items_schema_ = schema::make(attr.value(), root, {"items"}, uris);
1306
1307 sch.erase(attr);
1308 }
1309
1310 attr = sch.find("contains");
1311 if (attr != sch.end()) {
1312 contains_ = schema::make(attr.value(), root, {"contains"}, uris);
1313 sch.erase(attr);
1314 }
1315 }
std::vector< std::shared_ptr< schema > > items_
static std::shared_ptr< schema > make(json &schema, root_schema *root, const std::vector< std::string > &key, std::vector< nlohmann::json_uri > uris)
auto schema
Definition id-ref.cpp:69

References additionalItems_, contains_, items_, items_schema_, anonymous_namespace{json-validator.cpp}::schema::make(), maxItems_, minItems_, anonymous_namespace{json-validator.cpp}::schema::schema(), and uniqueItems_.

Here is the call graph for this function:

◆ array() [2/2]

anonymous_namespace{json-validator.cpp}::array::array ( json & sch,
root_schema * root,
const std::vector< nlohmann::json_uri > & uris )
inline

Definition at line 1268 of file json-validator.cpp.

1269 : schema(root)
1270 {
1271 auto attr = sch.find("maxItems");
1272 if (attr != sch.end()) {
1273 maxItems_ = {true, attr.value().get<size_t>()};
1274 sch.erase(attr);
1275 }
1276
1277 attr = sch.find("minItems");
1278 if (attr != sch.end()) {
1279 minItems_ = {true, attr.value().get<size_t>()};
1280 sch.erase(attr);
1281 }
1282
1283 attr = sch.find("uniqueItems");
1284 if (attr != sch.end()) {
1285 uniqueItems_ = attr.value().get<bool>();
1286 sch.erase(attr);
1287 }
1288
1289 attr = sch.find("items");
1290 if (attr != sch.end()) {
1291
1292 if (attr.value().type() == json::value_t::array) {
1293 size_t c = 0;
1294 for (auto &subsch : attr.value())
1295 items_.push_back(schema::make(subsch, root, {"items", std::to_string(c++)}, uris));
1296
1297 auto attr_add = sch.find("additionalItems");
1298 if (attr_add != sch.end()) {
1299 additionalItems_ = schema::make(attr_add.value(), root, {"additionalItems"}, uris);
1300 sch.erase(attr_add);
1301 }
1302
1303 } else if (attr.value().type() == json::value_t::object ||
1304 attr.value().type() == json::value_t::boolean)
1305 items_schema_ = schema::make(attr.value(), root, {"items"}, uris);
1306
1307 sch.erase(attr);
1308 }
1309
1310 attr = sch.find("contains");
1311 if (attr != sch.end()) {
1312 contains_ = schema::make(attr.value(), root, {"contains"}, uris);
1313 sch.erase(attr);
1314 }
1315 }

Member Function Documentation

◆ validate() [1/2]

void anonymous_namespace{json-validator.cpp}::array::validate ( const json::json_pointer & ptr,
const json & instance,
json_patch & patch,
error_handler & e ) const
inlineoverrideprivatevirtual

Implements anonymous_namespace{json-validator.cpp}::schema.

Definition at line 1212 of file json-validator.cpp.

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);
1257 if (!local_e) {
1258 contained = true;
1259 break;
1260 }
1261 }
1262 if (!contained)
1263 e.error(ptr, instance, "array does not contain required element as per 'contains'");
1264 }
1265 }
virtual void error(const json::json_pointer &, const json &, const std::string &)=0
static const auto instance
Definition issue-93.cpp:14

References additionalItems_, contains_, nlohmann::json_schema::error_handler::error(), items_, items_schema_, maxItems_, minItems_, uniqueItems_, and anonymous_namespace{json-validator.cpp}::schema::validate().

Here is the call graph for this function:

◆ validate() [2/2]

void anonymous_namespace{json-validator.cpp}::array::validate ( const json::json_pointer & ptr,
const json & instance,
json_patch & patch,
error_handler & e ) const
inlineoverrideprivatevirtual

Implements anonymous_namespace{json-validator.cpp}::schema.

Definition at line 1212 of file json-validator.cpp.

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);
1257 if (!local_e) {
1258 contained = true;
1259 break;
1260 }
1261 }
1262 if (!contained)
1263 e.error(ptr, instance, "array does not contain required element as per 'contains'");
1264 }
1265 }

Member Data Documentation

◆ additionalItems_

std::shared_ptr< schema > anonymous_namespace{json-validator.cpp}::array::additionalItems_
private

Definition at line 1208 of file json-validator.cpp.

Referenced by array(), and validate().

◆ contains_

std::shared_ptr< schema > anonymous_namespace{json-validator.cpp}::array::contains_
private

Definition at line 1210 of file json-validator.cpp.

Referenced by array(), and validate().

◆ items_

std::vector< std::shared_ptr< schema > > anonymous_namespace{json-validator.cpp}::array::items_
private

Definition at line 1207 of file json-validator.cpp.

Referenced by array(), and validate().

◆ items_schema_

std::shared_ptr< schema > anonymous_namespace{json-validator.cpp}::array::items_schema_
private

Definition at line 1205 of file json-validator.cpp.

Referenced by array(), and validate().

◆ maxItems_

std::pair< bool, size_t > anonymous_namespace{json-validator.cpp}::array::maxItems_ {false, 0}
private

Definition at line 1201 of file json-validator.cpp.

1201{false, 0};

Referenced by array(), and validate().

◆ minItems_

std::pair< bool, size_t > anonymous_namespace{json-validator.cpp}::array::minItems_ {false, 0}
private

Definition at line 1202 of file json-validator.cpp.

1202{false, 0};

Referenced by array(), and validate().

◆ uniqueItems_

bool anonymous_namespace{json-validator.cpp}::array::uniqueItems_ = false
private

Definition at line 1203 of file json-validator.cpp.

Referenced by array(), and validate().


The documentation for this class was generated from the following file: