Avoid overwriting of default values
This commit is contained in:
parent
27a1dec4e7
commit
2354610da5
@ -974,6 +974,20 @@ public:
|
|||||||
: schema(root), required_(r) {}
|
: schema(root), required_(r) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
json find_patch_add(const json::json_pointer &ptr, const json_patch &patch)
|
||||||
|
{
|
||||||
|
if (!patch.operator json().is_array()) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
std::string path = ptr.to_string();
|
||||||
|
for (const auto &op : patch.operator json()) {
|
||||||
|
if (op.at("path") == path && op.at("op") == "add") {
|
||||||
|
return op.at("value");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
class object : public schema
|
class object : public schema
|
||||||
{
|
{
|
||||||
std::pair<bool, size_t> maxProperties_{false, 0};
|
std::pair<bool, size_t> maxProperties_{false, 0};
|
||||||
@ -1037,6 +1051,12 @@ class object : public schema
|
|||||||
for (auto const &prop : properties_) {
|
for (auto const &prop : properties_) {
|
||||||
const auto finding = instance.find(prop.first);
|
const auto finding = instance.find(prop.first);
|
||||||
if (instance.end() == finding) { // if the prop is not in the instance
|
if (instance.end() == finding) { // if the prop is not in the instance
|
||||||
|
{
|
||||||
|
json default_value = find_patch_add((ptr / prop.first), patch);
|
||||||
|
if (!default_value.is_null()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
const auto &default_value = prop.second->default_value(ptr, instance, e);
|
const auto &default_value = prop.second->default_value(ptr, instance, e);
|
||||||
if (!default_value.is_null()) { // if default value is available
|
if (!default_value.is_null()) { // if default value is available
|
||||||
patch.add((ptr / prop.first), default_value);
|
patch.add((ptr / prop.first), default_value);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user