From 162f246e630b8fec6e89c40940876a2e9bd2f7ac Mon Sep 17 00:00:00 2001
From: Tristan Penman <tristan@tristanpenman.com>
Date: Thu, 22 Aug 2019 22:12:40 +1000
Subject: [PATCH] Add placeholders for conditional constraint

---
 .../constraints/concrete_constraints.hpp       |  6 ++++++
 .../constraints/constraint_visitor.hpp         |  3 +++
 include/valijson/schema_parser.hpp             | 18 ++++++++++++++++++
 include/valijson/validation_visitor.hpp        |  5 +++++
 4 files changed, 32 insertions(+)

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<ConditionalConstraint>
+{
+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<typename AdapterType>
+    constraints::ConditionalConstraint makeConditionalConstraint(
+        Schema &rootSchema,
+        const AdapterType &rootNode,
+        const AdapterType &ifNode,
+        const AdapterType &thenNode,
+        const AdapterType *elseNode,
+        const opt::optional<std::string> currentScope,
+        const std::string &nodePath,
+        const typename FunctionPtrs<AdapterType>::FetchDoc fetchDoc,
+        typename DocumentCache<AdapterType>::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
      *