summaryrefslogtreecommitdiff
path: root/src/components/smart_objects/include/smart_objects/enum_schema_item.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/smart_objects/include/smart_objects/enum_schema_item.h')
-rw-r--r--src/components/smart_objects/include/smart_objects/enum_schema_item.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/components/smart_objects/include/smart_objects/enum_schema_item.h b/src/components/smart_objects/include/smart_objects/enum_schema_item.h
index a0d6d94017..524d966188 100644
--- a/src/components/smart_objects/include/smart_objects/enum_schema_item.h
+++ b/src/components/smart_objects/include/smart_objects/enum_schema_item.h
@@ -65,12 +65,21 @@ class TEnumSchemaItem : public CDefaultSchemaItem<EnumType> {
const TSchemaItemParameter<EnumType>& DefaultValue =
TSchemaItemParameter<EnumType>());
/**
+ * @deprecated
* @brief Validate smart object.
* @param Object Object to validate.
* @return NsSmartObjects::Errors::eType
**/
Errors::eType validate(const SmartObject& Object) OVERRIDE;
/**
+ * @brief Validate smart object.
+ * @param Object Object to validate.
+ * @param report__ object for reporting errors during validation
+ * @return NsSmartObjects::Errors::eType
+ **/
+ Errors::eType validate(const SmartObject& Object,
+ rpc::ValidationReport* report__) OVERRIDE;
+ /**
* @brief Apply schema.
* This implementation checks if enumeration is represented as string
* and tries to convert it to integer according to element-to-string
@@ -207,11 +216,32 @@ utils::SharedPtr<TEnumSchemaItem<EnumType> > TEnumSchemaItem<EnumType>::create(
template <typename EnumType>
Errors::eType TEnumSchemaItem<EnumType>::validate(const SmartObject& Object) {
+ rpc::ValidationReport report("RPC");
+ return validate(Object, &report);
+}
+
+template <typename EnumType>
+Errors::eType TEnumSchemaItem<EnumType>::validate(
+ const SmartObject& Object, rpc::ValidationReport* report__) {
if (SmartType_Integer != Object.getType()) {
+ std::string validation_info;
+ if (SmartType_String == Object.getType()) {
+ validation_info = "Invalid enum value: " + Object.asString();
+ } else {
+ validation_info = "Incorrect type, expected: " +
+ SmartObject::typeToString(SmartType_Integer) +
+ " (enum), got: " +
+ SmartObject::typeToString(Object.getType());
+ }
+ report__->set_validation_info(validation_info);
return Errors::INVALID_VALUE;
}
if (mAllowedElements.find(static_cast<EnumType>(Object.asInt())) ==
mAllowedElements.end()) {
+ std::stringstream stream;
+ stream << "Invalid enum value: " << Object.asInt();
+ std::string validation_info = stream.str();
+ report__->set_validation_info(validation_info);
return Errors::OUT_OF_RANGE;
}
return Errors::OK;