array_constraint.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. private:
  30. int64_t value_;
  31. public:
  32. MaxItemsConstraint(int64_t value) : value_(value) {}
  33. bool operator()(ArrayAdapter auto const & arg) const { return arg.size() <= value_; }
  34. };
  35. class MinItemsConstraint : public SimpleConstraint<MinItemsConstraint> {
  36. private:
  37. int64_t value_;
  38. public:
  39. MinItemsConstraint(int64_t value) : value_(value) {}
  40. bool operator()(ArrayAdapter auto const & arg) const { return arg.size() >= value_; }
  41. };
  42. class TupleConstraint : public SimpleConstraint<TupleConstraint> {
  43. public:
  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 SimpleConstraint<UnevaluatedItemsConstraint> {
  49. public:
  50. schema::Node const * subschema;
  51. public:
  52. UnevaluatedItemsConstraint(schema::Node const * subschema) : subschema(subschema) {}
  53. };
  54. class UniqueItemsConstraint : public SimpleConstraint<UniqueItemsConstraint> {
  55. public:
  56. };
  57. }