general_constraint.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #pragma once
  2. #include <memory>
  3. #include <set>
  4. #include <utility>
  5. #include <vector>
  6. #include <jvalidate/constraint/constraint.h>
  7. #include <jvalidate/forward.h>
  8. #include <jvalidate/status.h>
  9. namespace jvalidate::constraint {
  10. class AllOfConstraint : public SimpleConstraint<AllOfConstraint> {
  11. public:
  12. std::vector<SubConstraint> children;
  13. public:
  14. AllOfConstraint(std::vector<schema::Node const *> const & children)
  15. : children(children.begin(), children.end()) {}
  16. AllOfConstraint(std::vector<std::unique_ptr<Constraint>> && children) {
  17. for (auto && child : children) {
  18. this->children.push_back(std::move(child));
  19. }
  20. }
  21. };
  22. class AnyOfConstraint : public SimpleConstraint<AnyOfConstraint> {
  23. public:
  24. std::vector<SubConstraint> children;
  25. public:
  26. AnyOfConstraint(std::vector<schema::Node const *> const & children)
  27. : children(children.begin(), children.end()) {}
  28. AnyOfConstraint(std::vector<std::unique_ptr<Constraint>> && children) {
  29. for (auto && child : children) {
  30. this->children.push_back(std::move(child));
  31. }
  32. }
  33. };
  34. class EnumConstraint : public SimpleConstraint<EnumConstraint> {
  35. public:
  36. std::vector<std::unique_ptr<adapter::Const const>> enumeration;
  37. public:
  38. EnumConstraint(std::unique_ptr<adapter::Const const> && constant) {
  39. enumeration.push_back(std::move(constant));
  40. }
  41. EnumConstraint(std::vector<std::unique_ptr<adapter::Const const>> && enums)
  42. : enumeration(std::move(enums)) {}
  43. };
  44. class OneOfConstraint : public SimpleConstraint<OneOfConstraint> {
  45. public:
  46. std::vector<schema::Node const *> children;
  47. public:
  48. OneOfConstraint(std::vector<schema::Node const *> const & children) : children(children) {}
  49. };
  50. class ConditionalConstraint : public SimpleConstraint<ConditionalConstraint> {
  51. public:
  52. schema::Node const * if_constraint;
  53. schema::Node const * then_constraint;
  54. schema::Node const * else_constraint;
  55. public:
  56. ConditionalConstraint(schema::Node const * if_constraint, schema::Node const * then_constraint,
  57. schema::Node const * else_constraint)
  58. : if_constraint(if_constraint), then_constraint(then_constraint),
  59. else_constraint(else_constraint) {}
  60. };
  61. class NotConstraint : public SimpleConstraint<NotConstraint> {
  62. public:
  63. SubConstraint child;
  64. public:
  65. NotConstraint(schema::Node const * child) : child(child) {}
  66. NotConstraint(std::unique_ptr<Constraint> && child) : child(std::move(child)) {}
  67. };
  68. class TypeConstraint : public SimpleConstraint<TypeConstraint> {
  69. public:
  70. std::set<adapter::Type> types;
  71. public:
  72. TypeConstraint(adapter::Type type) : types{type} {}
  73. TypeConstraint(std::set<adapter::Type> const & types) : types(types) {}
  74. };
  75. }