summaryrefslogtreecommitdiff
path: root/src/components/smart_objects/src/object_schema_item.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/smart_objects/src/object_schema_item.cc')
-rw-r--r--src/components/smart_objects/src/object_schema_item.cc38
1 files changed, 21 insertions, 17 deletions
diff --git a/src/components/smart_objects/src/object_schema_item.cc b/src/components/smart_objects/src/object_schema_item.cc
index 742c2ec353..be1c73fb85 100644
--- a/src/components/smart_objects/src/object_schema_item.cc
+++ b/src/components/smart_objects/src/object_schema_item.cc
@@ -40,7 +40,7 @@ namespace {
const char connection_key[] = "connection_key";
const char binary_data[] = "binary_data";
const char app_id[] = "appID";
-}
+} // namespace
namespace ns_smart_device_link {
namespace ns_smart_objects {
@@ -110,12 +110,13 @@ std::shared_ptr<CObjectSchemaItem> CObjectSchemaItem::create(
errors::eType CObjectSchemaItem::validate(
const SmartObject& object,
rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion) {
+ const utils::SemanticVersion& MessageVersion,
+ const bool allow_unknown_enums) {
if (SmartType_Map != object.getType()) {
- std::string validation_info = "Incorrect type, expected: " +
- SmartObject::typeToString(SmartType_Map) +
- ", got: " +
- SmartObject::typeToString(object.getType());
+ std::string validation_info =
+ "Incorrect type, expected: " +
+ SmartObject::typeToString(SmartType_Map) +
+ ", got: " + SmartObject::typeToString(object.getType());
report__->set_validation_info(validation_info);
return errors::INVALID_VALUE;
}
@@ -142,8 +143,11 @@ errors::eType CObjectSchemaItem::validate(
errors::eType result = errors::OK;
// Check if MessageVersion matches schema version
- result = correct_member.mSchemaItem->validate(
- field, &report__->ReportSubobject(key), MessageVersion);
+ result =
+ correct_member.mSchemaItem->validate(field,
+ &report__->ReportSubobject(key),
+ MessageVersion,
+ allow_unknown_enums);
if (errors::OK != result) {
return result;
}
@@ -154,13 +158,13 @@ errors::eType CObjectSchemaItem::validate(
void CObjectSchemaItem::applySchema(
SmartObject& Object,
- const bool RemoveFakeParameters,
+ const bool remove_unknown_parameters,
const utils::SemanticVersion& MessageVersion) {
if (SmartType_Map != Object.getType()) {
return;
}
- if (RemoveFakeParameters) {
+ if (remove_unknown_parameters) {
RemoveFakeParams(Object, MessageVersion);
}
@@ -173,16 +177,17 @@ void CObjectSchemaItem::applySchema(
if (member.mSchemaItem->setDefaultValue(default_value)) {
Object[key] = default_value;
member.mSchemaItem->applySchema(
- Object[key], RemoveFakeParameters, MessageVersion);
+ Object[key], remove_unknown_parameters, MessageVersion);
}
} else {
member.mSchemaItem->applySchema(
- Object[key], RemoveFakeParameters, MessageVersion);
+ Object[key], remove_unknown_parameters, MessageVersion);
}
}
}
-void CObjectSchemaItem::unapplySchema(SmartObject& Object) {
+void CObjectSchemaItem::unapplySchema(SmartObject& Object,
+ const bool remove_unknown_parameters) {
if (SmartType_Map != Object.getType()) {
return;
}
@@ -191,7 +196,7 @@ void CObjectSchemaItem::unapplySchema(SmartObject& Object) {
const std::string& key = it->first;
// move next to avoid wrong iterator on erase
++it;
- if (mMembers.end() == mMembers.find(key)) {
+ if (mMembers.end() == mMembers.find(key) && remove_unknown_parameters) {
// remove fake params
Object.erase(key);
}
@@ -202,7 +207,7 @@ void CObjectSchemaItem::unapplySchema(SmartObject& Object) {
const std::string& key = it->first;
const SMember& member = it->second;
if (Object.keyExists(key)) {
- member.mSchemaItem->unapplySchema(Object[key]);
+ member.mSchemaItem->unapplySchema(Object[key], remove_unknown_parameters);
}
}
}
@@ -239,8 +244,7 @@ void CObjectSchemaItem::RemoveFakeParams(
mMembers.find(key);
if (mMembers.end() == members_it
// FIXME(EZamakhov): Remove illegal usage of filed in AM
- &&
- key.compare(connection_key) != 0 && key.compare(binary_data) != 0 &&
+ && key.compare(connection_key) != 0 && key.compare(binary_data) != 0 &&
key.compare(app_id) != 0) {
++it;
Object.erase(key);