array_constraint.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #pragma once
  2. #include <jvalidate/detail/expect.h>
  3. #include <optional>
  4. #include <vector>
  5. #include <jvalidate/adapter.h>
  6. #include <jvalidate/constraint/constraint.h>
  7. #include <jvalidate/forward.h>
  8. #include <jvalidate/validator.h>
  9. namespace jvalidate::constraint {
  10. class AdditionalItemsConstraint : public Constraint {
  11. private:
  12. schema::Node const * subschema_;
  13. size_t applies_after_nth_;
  14. public:
  15. AdditionalItemsConstraint(schema::Node const * subschema, size_t applies_after_nth)
  16. : subschema_(subschema), applies_after_nth_(applies_after_nth) {}
  17. };
  18. class ContainsConstraint : public Constraint {
  19. private:
  20. std::unique_ptr<adapter::Const const> constant_;
  21. std::optional<size_t> minimum_;
  22. std::optional<size_t> maximum_;
  23. public:
  24. ContainsConstraint(std::unique_ptr<adapter::Const const> && constant)
  25. : constant_(std::move(constant)) {}
  26. ContainsConstraint(std::unique_ptr<adapter::Const const> && constant,
  27. std::optional<size_t> minimum, std::optional<size_t> maximum)
  28. : constant_(std::move(constant)), minimum_(minimum), maximum_(maximum) {}
  29. };
  30. class MaxItemsConstraint : public Constraint {
  31. private:
  32. int64_t value_;
  33. public:
  34. MaxItemsConstraint(int64_t value) : value_(value) {}
  35. };
  36. class MinItemsConstraint : public Constraint {
  37. private:
  38. int64_t value_;
  39. public:
  40. MinItemsConstraint(int64_t value) : value_(value) {}
  41. };
  42. class TupleConstraint : public Constraint {
  43. private:
  44. std::vector<schema::Node const *> items_;
  45. public:
  46. TupleConstraint(std::vector<schema::Node const *> const & items) : items_(items) {}
  47. };
  48. class UnevaluatedItemsConstraint : public Constraint {
  49. private:
  50. schema::Node const * subschema_;
  51. public:
  52. UnevaluatedItemsConstraint(schema::Node const * subschema) : subschema_(subschema) {}
  53. };
  54. class UniqueItemsConstraint : public Constraint {
  55. public:
  56. };
  57. }