#pragma once #include #include #include #include #include #include namespace jvalidate::constraint { class AdditionalItemsConstraint : public SimpleConstraint { public: schema::Node const * subschema; size_t applies_after_nth; public: AdditionalItemsConstraint(schema::Node const * subschema, size_t applies_after_nth) : subschema(subschema), applies_after_nth(applies_after_nth) {} }; class ContainsConstraint : public SimpleConstraint { public: schema::Node const * subschema; std::optional minimum; std::optional maximum; public: ContainsConstraint(schema::Node const * subschema) : subschema(subschema) {} ContainsConstraint(schema::Node const * subschema, std::optional minimum, std::optional maximum) : subschema(subschema), minimum(minimum), maximum(maximum) {} }; class MaxItemsConstraint : public SimpleConstraint { public: int64_t value; public: MaxItemsConstraint(int64_t value) : value(value) {} }; class MinItemsConstraint : public SimpleConstraint { public: int64_t value; public: MinItemsConstraint(int64_t value) : value(value) {} }; class TupleConstraint : public SimpleConstraint { public: std::vector items; public: TupleConstraint(std::vector const & items) : items(items) {} }; class UnevaluatedItemsConstraint : public SimpleConstraint { public: schema::Node const * subschema; public: UnevaluatedItemsConstraint(schema::Node const * subschema) : subschema(subschema) {} }; class UniqueItemsConstraint : public SimpleConstraint { public: }; }