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 *