array_constraint.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. namespace jvalidate::constraint {
  9. class AdditionalItemsConstraint : public SimpleConstraint<AdditionalItemsConstraint> {
  10. public:
  11. schema::Node const * subschema;
  12. size_t applies_after_nth;
  13. public:
  14. AdditionalItemsConstraint(schema::Node const * subschema, size_t applies_after_nth)
  15. : subschema(subschema), applies_after_nth(applies_after_nth) {}
  16. };
  17. class ContainsConstraint : public SimpleConstraint<ContainsConstraint> {
  18. public:
  19. schema::Node const * subschema;
  20. std::optional<size_t> minimum;
  21. std::optional<size_t> maximum;
  22. public:
  23. ContainsConstraint(schema::Node const * subschema) : subschema(subschema) {}
  24. ContainsConstraint(schema::Node const * subschema, std::optional<size_t> minimum,
  25. std::optional<size_t> maximum)
  26. : subschema(subschema), minimum(minimum), maximum(maximum) {}
  27. };
  28. class MaxItemsConstraint : public SimpleConstraint<MaxItemsConstraint> {
  29. public:
  30. int64_t value;
  31. public:
  32. MaxItemsConstraint(int64_t value) : value(value) {}
  33. };
  34. class MinItemsConstraint : public SimpleConstraint<MinItemsConstraint> {
  35. public:
  36. int64_t value;
  37. public:
  38. MinItemsConstraint(int64_t value) : value(value) {}
  39. };
  40. class TupleConstraint : public SimpleConstraint<TupleConstraint> {
  41. public:
  42. std::vector<schema::Node const *> items;
  43. public:
  44. TupleConstraint(std::vector<schema::Node const *> const & items) : items(items) {}
  45. };
  46. class UnevaluatedItemsConstraint : public SimpleConstraint<UnevaluatedItemsConstraint> {
  47. public:
  48. schema::Node const * subschema;
  49. public:
  50. UnevaluatedItemsConstraint(schema::Node const * subschema) : subschema(subschema) {}
  51. };
  52. class UniqueItemsConstraint : public SimpleConstraint<UniqueItemsConstraint> {
  53. public:
  54. };
  55. }