object_constraint.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #pragma once
  2. #include <map>
  3. #include <optional>
  4. #include <string>
  5. #include <unordered_set>
  6. #include <utility>
  7. #include <vector>
  8. #include <jvalidate/constraint/constraint.h>
  9. #include <jvalidate/forward.h>
  10. namespace jvalidate::constraint {
  11. class AdditionalPropertiesConstraint : public Constraint {
  12. private:
  13. schema::Node const * subschema_;
  14. std::unordered_set<std::string> properties_;
  15. std::vector<std::string> patterns_;
  16. public:
  17. AdditionalPropertiesConstraint(schema::Node const * subschema,
  18. std::unordered_set<std::string> const & properties,
  19. std::vector<std::string> const & patterns)
  20. : subschema_(subschema), properties_(properties), patterns_(patterns) {}
  21. };
  22. class DependenciesConstraint : public Constraint {
  23. private:
  24. std::map<std::string, schema::Node const *> subschemas_;
  25. std::map<std::string, std::vector<std::string>> required_;
  26. public:
  27. DependenciesConstraint(std::map<std::string, schema::Node const *> const & subschemas)
  28. : subschemas_(subschemas) {}
  29. DependenciesConstraint(std::map<std::string, std::vector<std::string>> const & required)
  30. : required_(required) {}
  31. DependenciesConstraint(std::map<std::string, schema::Node const *> const & subschemas,
  32. std::map<std::string, std::vector<std::string>> const & required)
  33. : subschemas_(subschemas), required_(required) {}
  34. };
  35. class MaxPropertiesConstraint : public Constraint {
  36. private:
  37. int64_t value_;
  38. public:
  39. MaxPropertiesConstraint(int64_t value) : value_(value) {}
  40. };
  41. class MinPropertiesConstraint : public Constraint {
  42. private:
  43. int64_t value_;
  44. public:
  45. MinPropertiesConstraint(int64_t value) : value_(value) {}
  46. };
  47. class PatternPropertiesConstraint : public Constraint {
  48. private:
  49. std::vector<std::pair<std::string, schema::Node const *>> properties_;
  50. public:
  51. PatternPropertiesConstraint(
  52. std::vector<std::pair<std::string, schema::Node const *>> const & properties)
  53. : properties_(properties) {}
  54. };
  55. class PropertiesConstraint : public Constraint {
  56. private:
  57. std::map<std::string, schema::Node const *> properties_;
  58. public:
  59. PropertiesConstraint(std::map<std::string, schema::Node const *> const & properties)
  60. : properties_(properties) {}
  61. };
  62. class PropertyNamesConstraint : public Constraint {
  63. private:
  64. schema::Node const * key_schema_;
  65. public:
  66. PropertyNamesConstraint(schema::Node const * key_schema) : key_schema_(key_schema) {}
  67. };
  68. class RequiredConstraint : public Constraint {
  69. private:
  70. std::unordered_set<std::string> properties_;
  71. public:
  72. RequiredConstraint(std::unordered_set<std::string> const & properties)
  73. : properties_(properties) {}
  74. };
  75. class UnevaluatedPropertiesConstraint : public Constraint {
  76. private:
  77. schema::Node const * subschema_;
  78. public:
  79. UnevaluatedPropertiesConstraint(schema::Node const * subschema) : subschema_(subschema) {}
  80. };
  81. }