diff --git a/include/valijson/constraints/concrete_constraints.hpp b/include/valijson/constraints/concrete_constraints.hpp index ba0149d..3441c89 100644 --- a/include/valijson/constraints/concrete_constraints.hpp +++ b/include/valijson/constraints/concrete_constraints.hpp @@ -116,6 +116,12 @@ private: /// Collection of sub-schemas, at least one of which must be satisfied Subschemas subschemas; }; + +class ConditionalConstraint: public BasicConstraint +{ +public: + ConditionalConstraint() { } +}; /** * @brief Represents a 'dependencies' constraint. diff --git a/include/valijson/constraints/constraint_visitor.hpp b/include/valijson/constraints/constraint_visitor.hpp index a45dab0..8f94a6b 100644 --- a/include/valijson/constraints/constraint_visitor.hpp +++ b/include/valijson/constraints/constraint_visitor.hpp @@ -7,6 +7,7 @@ namespace constraints { class AllOfConstraint; class AnyOfConstraint; +class ConditionalConstraint; class DependenciesConstraint; class EnumConstraint; class LinearItemsConstraint; @@ -39,6 +40,7 @@ protected: // Shorten type names for derived classes outside of this namespace typedef constraints::AllOfConstraint AllOfConstraint; typedef constraints::AnyOfConstraint AnyOfConstraint; + typedef constraints::ConditionalConstraint ConditionalConstraint; typedef constraints::DependenciesConstraint DependenciesConstraint; typedef constraints::EnumConstraint EnumConstraint; typedef constraints::LinearItemsConstraint LinearItemsConstraint; @@ -66,6 +68,7 @@ public: virtual bool visit(const AllOfConstraint &) = 0; virtual bool visit(const AnyOfConstraint &) = 0; + virtual bool visit(const ConditionalConstraint &) = 0; virtual bool visit(const DependenciesConstraint &) = 0; virtual bool visit(const EnumConstraint &) = 0; virtual bool visit(const LinearItemsConstraint &) = 0; diff --git a/include/valijson/schema_parser.hpp b/include/valijson/schema_parser.hpp index 79ee08a..c93f096 100644 --- a/include/valijson/schema_parser.hpp +++ b/include/valijson/schema_parser.hpp @@ -1125,6 +1125,24 @@ private: return constraint; } + template + constraints::ConditionalConstraint makeConditionalConstraint( + Schema &rootSchema, + const AdapterType &rootNode, + const AdapterType &ifNode, + const AdapterType &thenNode, + const AdapterType *elseNode, + const opt::optional currentScope, + const std::string &nodePath, + const typename FunctionPtrs::FetchDoc fetchDoc, + typename DocumentCache::Type &docCache, + SchemaCache &schemaCache + ) { + constraints::ConditionalConstraint constraint; + + return constraint; + } + /** * @brief Make a new DependenciesConstraint object * diff --git a/include/valijson/validation_visitor.hpp b/include/valijson/validation_visitor.hpp index 548bd28..f55f7fc 100644 --- a/include/valijson/validation_visitor.hpp +++ b/include/valijson/validation_visitor.hpp @@ -160,6 +160,11 @@ public: return numValidated > 0; } + virtual bool visit(const ConditionalConstraint &constraint) + { + return false; + } + /** * @brief Validate current node against a 'dependencies' constraint *