#pragma once #include #include #include #include #include #include #include namespace jvalidate::constraint { class AdditionalItemsConstraint : public Constraint { private: 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 Constraint { private: std::unique_ptr constant_; std::optional minimum_; std::optional maximum_; public: ContainsConstraint(std::unique_ptr && constant) : constant_(std::move(constant)) {} ContainsConstraint(std::unique_ptr && constant, std::optional minimum, std::optional maximum) : constant_(std::move(constant)), minimum_(minimum), maximum_(maximum) {} }; class MaxItemsConstraint : public Constraint { private: int64_t value_; public: MaxItemsConstraint(int64_t value) : value_(value) {} }; class MinItemsConstraint : public Constraint { private: int64_t value_; public: MinItemsConstraint(int64_t value) : value_(value) {} }; class TupleConstraint : public Constraint { private: std::vector items_; public: TupleConstraint(std::vector const & items) : items_(items) {} }; class UnevaluatedItemsConstraint : public Constraint { private: schema::Node const * subschema_; public: UnevaluatedItemsConstraint(schema::Node const * subschema) : subschema_(subschema) {} }; class UniqueItemsConstraint : public Constraint { public: }; }