in relation to solving issue #784, this commit enables the schema to recognise the "default" property, and avoids a missing property error when a default is given in the schema
This commit is contained in:
parent
af223d44f4
commit
fa98b5b4b6
@ -440,7 +440,8 @@ public:
|
|||||||
minLength_(0),
|
minLength_(0),
|
||||||
maxLength_(~SizeType(0)),
|
maxLength_(~SizeType(0)),
|
||||||
exclusiveMinimum_(false),
|
exclusiveMinimum_(false),
|
||||||
exclusiveMaximum_(false)
|
exclusiveMaximum_(false),
|
||||||
|
defaultValue_()
|
||||||
{
|
{
|
||||||
typedef typename SchemaDocumentType::ValueType ValueType;
|
typedef typename SchemaDocumentType::ValueType ValueType;
|
||||||
typedef typename ValueType::ConstValueIterator ConstValueIterator;
|
typedef typename ValueType::ConstValueIterator ConstValueIterator;
|
||||||
@ -635,6 +636,12 @@ public:
|
|||||||
if (const ValueType* v = GetMember(value, GetMultipleOfString()))
|
if (const ValueType* v = GetMember(value, GetMultipleOfString()))
|
||||||
if (v->IsNumber() && v->GetDouble() > 0.0)
|
if (v->IsNumber() && v->GetDouble() > 0.0)
|
||||||
multipleOf_.CopyFrom(*v, *allocator_);
|
multipleOf_.CopyFrom(*v, *allocator_);
|
||||||
|
|
||||||
|
// Default
|
||||||
|
if (const ValueType* v = GetMember(value, GetDefaultValueString()))
|
||||||
|
if (v->IsString())
|
||||||
|
defaultValue_ = v->GetString();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
~Schema() {
|
~Schema() {
|
||||||
@ -935,8 +942,14 @@ public:
|
|||||||
if (hasRequired_) {
|
if (hasRequired_) {
|
||||||
context.error_handler.StartMissingProperties();
|
context.error_handler.StartMissingProperties();
|
||||||
for (SizeType index = 0; index < propertyCount_; index++)
|
for (SizeType index = 0; index < propertyCount_; index++)
|
||||||
if (properties_[index].required && !context.propertyExist[index])
|
if (properties_[index].required && !context.propertyExist[index]){
|
||||||
|
if (properties_[index].schema->defaultValue_.empty() || properties_[index].schema->defaultValue_ == "" ){
|
||||||
context.error_handler.AddMissingProperty(properties_[index].name);
|
context.error_handler.AddMissingProperty(properties_[index].name);
|
||||||
|
} else {
|
||||||
|
// std::cout << "default value of " << properties_[index].name.GetString()
|
||||||
|
// << " is:" << properties_[index].schema->defaultValue_ << "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
if (context.error_handler.EndMissingProperties())
|
if (context.error_handler.EndMissingProperties())
|
||||||
RAPIDJSON_INVALID_KEYWORD_RETURN(GetRequiredString());
|
RAPIDJSON_INVALID_KEYWORD_RETURN(GetRequiredString());
|
||||||
}
|
}
|
||||||
@ -1046,6 +1059,7 @@ public:
|
|||||||
RAPIDJSON_STRING_(ExclusiveMinimum, 'e', 'x', 'c', 'l', 'u', 's', 'i', 'v', 'e', 'M', 'i', 'n', 'i', 'm', 'u', 'm')
|
RAPIDJSON_STRING_(ExclusiveMinimum, 'e', 'x', 'c', 'l', 'u', 's', 'i', 'v', 'e', 'M', 'i', 'n', 'i', 'm', 'u', 'm')
|
||||||
RAPIDJSON_STRING_(ExclusiveMaximum, 'e', 'x', 'c', 'l', 'u', 's', 'i', 'v', 'e', 'M', 'a', 'x', 'i', 'm', 'u', 'm')
|
RAPIDJSON_STRING_(ExclusiveMaximum, 'e', 'x', 'c', 'l', 'u', 's', 'i', 'v', 'e', 'M', 'a', 'x', 'i', 'm', 'u', 'm')
|
||||||
RAPIDJSON_STRING_(MultipleOf, 'm', 'u', 'l', 't', 'i', 'p', 'l', 'e', 'O', 'f')
|
RAPIDJSON_STRING_(MultipleOf, 'm', 'u', 'l', 't', 'i', 'p', 'l', 'e', 'O', 'f')
|
||||||
|
RAPIDJSON_STRING_(DefaultValue, 'd', 'e', 'f', 'a', 'u', 'l', 't')
|
||||||
|
|
||||||
#undef RAPIDJSON_STRING_
|
#undef RAPIDJSON_STRING_
|
||||||
|
|
||||||
@ -1426,6 +1440,8 @@ private:
|
|||||||
SValue multipleOf_;
|
SValue multipleOf_;
|
||||||
bool exclusiveMinimum_;
|
bool exclusiveMinimum_;
|
||||||
bool exclusiveMaximum_;
|
bool exclusiveMaximum_;
|
||||||
|
|
||||||
|
std::string defaultValue_;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Stack, typename Ch>
|
template<typename Stack, typename Ch>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user