|
@@ -407,6 +407,8 @@ namespace Framework
|
|
|
|
|
|
template<typename T> class ArrayValidationBuilder;
|
|
|
|
|
|
+ template<typename T> class OneOfValidationBuilder;
|
|
|
+
|
|
|
class JSONValidator : public Framework::ReferenceCounter
|
|
|
{
|
|
|
private:
|
|
@@ -459,6 +461,8 @@ namespace Framework
|
|
|
JSONValidator>* buildForObject();
|
|
|
__declspec(dllexport) static ArrayValidationBuilder<
|
|
|
JSONValidator>* buildForArray();
|
|
|
+ __declspec(dllexport) static OneOfValidationBuilder<
|
|
|
+ JSONValidator>* buildForOneOf();
|
|
|
__declspec(
|
|
|
dllexport) static JSONValidator* buildForObjectReference(Text
|
|
|
objectId);
|
|
@@ -501,7 +505,7 @@ namespace Framework
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
- StringValidationBuilder<T>* whichIsOneOf(RCArray<Text>& values)
|
|
|
+ StringValidationBuilder<T>* whichIsOneOf(RCArray<Text> values)
|
|
|
{
|
|
|
JSONArray arr;
|
|
|
for (Text* str : values)
|
|
@@ -510,6 +514,24 @@ namespace Framework
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
+ StringValidationBuilder<T>* whichIsOneOf(
|
|
|
+ std::initializer_list<Text> values)
|
|
|
+ {
|
|
|
+ JSONArray arr;
|
|
|
+ for (Text str : values)
|
|
|
+ arr.addValue(new JSONString(str));
|
|
|
+ element.setAttribute("oneOf", arr.toString());
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ StringValidationBuilder<T>* whichIs(Text value)
|
|
|
+ {
|
|
|
+ JSONArray arr;
|
|
|
+ arr.addValue(new JSONString(value));
|
|
|
+ element.setAttribute("oneOf", arr.toString());
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
StringValidationBuilder<T>* withDefault(Text value)
|
|
|
{
|
|
|
element.setAttribute(
|
|
@@ -983,6 +1005,91 @@ namespace Framework
|
|
|
return result;
|
|
|
}
|
|
|
};
|
|
|
+
|
|
|
+ template<typename T> class OneOfValidationBuilder
|
|
|
+ {
|
|
|
+ private:
|
|
|
+ XML::Element element;
|
|
|
+ std::function<T*(XML::Element& element)> builder;
|
|
|
+
|
|
|
+ public:
|
|
|
+ OneOfValidationBuilder(
|
|
|
+ std::function<T*(XML::Element& element)> builder)
|
|
|
+ : element("<oneOf></oneOf>"),
|
|
|
+ builder(builder)
|
|
|
+ {}
|
|
|
+
|
|
|
+ StringValidationBuilder<OneOfValidationBuilder<T>>*
|
|
|
+ addAcceptedStringInArray()
|
|
|
+ {
|
|
|
+ return new StringValidationBuilder<
|
|
|
+ OneOfValidationBuilder<T>>([this](XML::Element& e) {
|
|
|
+ element.addChild(e.dublicate());
|
|
|
+ return this;
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ NumberValidationBuilder<OneOfValidationBuilder<T>>*
|
|
|
+ addAcceptedNumberInArray()
|
|
|
+ {
|
|
|
+ return new NumberValidationBuilder<
|
|
|
+ OneOfValidationBuilder<T>>([this](XML::Element& e) {
|
|
|
+ element.addChild(e.dublicate());
|
|
|
+ return this;
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ BoolValidationBuilder<OneOfValidationBuilder<T>>*
|
|
|
+ addAcceptedBooleanInArray()
|
|
|
+ {
|
|
|
+ return new BoolValidationBuilder<OneOfValidationBuilder<T>>(
|
|
|
+ [this](XML::Element& e) {
|
|
|
+ element.addChild(e.dublicate());
|
|
|
+ return this;
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ ObjectValidationBuilder<OneOfValidationBuilder<T>>*
|
|
|
+ addAcceptedObjectInArray()
|
|
|
+ {
|
|
|
+ return new ObjectValidationBuilder<
|
|
|
+ OneOfValidationBuilder<T>>([this](XML::Element& e) {
|
|
|
+ element.addChild(e.dublicate());
|
|
|
+ return this;
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ ArrayValidationBuilder<OneOfValidationBuilder<T>>*
|
|
|
+ addAcceptedArrayInArray()
|
|
|
+ {
|
|
|
+ return new ArrayValidationBuilder<
|
|
|
+ OneOfValidationBuilder<T>>([this](XML::Element& e) {
|
|
|
+ element.addChild(e.dublicate());
|
|
|
+ return this;
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ OneOfValidationBuilder<T>* addAcceptedType(
|
|
|
+ JSONValidator* validator)
|
|
|
+ {
|
|
|
+ element.addChild(validator->zConstraints()->dublicate());
|
|
|
+ validator->release();
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ OneOfValidationBuilder<T>* typeSpecifiedByAttribute(Text name)
|
|
|
+ {
|
|
|
+ element.setAttribute("typeSpecifiedBy", name);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ T* finishOneOf()
|
|
|
+ {
|
|
|
+ T* result = builder(element);
|
|
|
+ delete this;
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ };
|
|
|
} // namespace Validator
|
|
|
} // namespace JSON
|
|
|
} // namespace Framework
|