#pragma once #include #include #include #include #include #include #include namespace jvalidate::constraint { class AllOfConstraint : public SimpleConstraint { public: std::vector children; public: AllOfConstraint(std::vector const & children) : children(children.begin(), children.end()) {} AllOfConstraint(std::vector> && children) { for (auto && child : children) { this->children.push_back(std::move(child)); } } }; class AnyOfConstraint : public SimpleConstraint { public: std::vector children; public: AnyOfConstraint(std::vector const & children) : children(children.begin(), children.end()) {} AnyOfConstraint(std::vector> && children) { for (auto && child : children) { this->children.push_back(std::move(child)); } } }; class EnumConstraint : public SimpleConstraint { public: std::vector> enumeration; public: EnumConstraint(std::unique_ptr && constant) { enumeration.push_back(std::move(constant)); } EnumConstraint(std::vector> && enums) : enumeration(std::move(enums)) {} }; class OneOfConstraint : public SimpleConstraint { public: std::vector children; public: OneOfConstraint(std::vector const & children) : children(children) {} }; class ConditionalConstraint : public SimpleConstraint { public: schema::Node const * if_constraint; schema::Node const * then_constraint; schema::Node const * else_constraint; public: ConditionalConstraint(schema::Node const * if_constraint, schema::Node const * then_constraint, schema::Node const * else_constraint) : if_constraint(if_constraint), then_constraint(then_constraint), else_constraint(else_constraint) {} }; class NotConstraint : public SimpleConstraint { public: SubConstraint child; public: NotConstraint(schema::Node const * child) : child(child) {} NotConstraint(std::unique_ptr && child) : child(std::move(child)) {} }; class TypeConstraint : public SimpleConstraint { public: std::set types; public: TypeConstraint(adapter::Type type) : types{type} {} TypeConstraint(std::set const & types) : types(types) {} }; }