object_constraint.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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 SimpleConstraint<AdditionalPropertiesConstraint> {
  12. public:
  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 SimpleConstraint<DependenciesConstraint> {
  23. public:
  24. std::map<std::string, schema::Node const *> subschemas;
  25. std::map<std::string, std::unordered_set<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::unordered_set<std::string>> const & required)
  30. : required(required) {}
  31. DependenciesConstraint(std::map<std::string, schema::Node const *> const & subschemas,
  32. std::map<std::string, std::unordered_set<std::string>> const & required)
  33. : subschemas(subschemas), required(required) {}
  34. };
  35. class MaxPropertiesConstraint : public SimpleConstraint<MaxPropertiesConstraint> {
  36. private:
  37. int64_t value_;
  38. public:
  39. MaxPropertiesConstraint(int64_t value) : value_(value) {}
  40. bool operator()(ObjectAdapter auto const & arg) const { return arg.size() <= value_; }
  41. };
  42. class MinPropertiesConstraint : public SimpleConstraint<MinPropertiesConstraint> {
  43. private:
  44. int64_t value_;
  45. public:
  46. MinPropertiesConstraint(int64_t value) : value_(value) {}
  47. bool operator()(ObjectAdapter auto const & arg) const { return arg.size() >= value_; }
  48. };
  49. class PatternPropertiesConstraint : public SimpleConstraint<PatternPropertiesConstraint> {
  50. public:
  51. std::vector<std::pair<std::string, schema::Node const *>> properties;
  52. public:
  53. PatternPropertiesConstraint(
  54. std::vector<std::pair<std::string, schema::Node const *>> const & properties)
  55. : properties(properties) {}
  56. };
  57. class PropertiesConstraint : public SimpleConstraint<PropertiesConstraint> {
  58. public:
  59. std::map<std::string, schema::Node const *> properties;
  60. public:
  61. PropertiesConstraint(std::map<std::string, schema::Node const *> const & properties)
  62. : properties(properties) {}
  63. };
  64. class PropertyNamesConstraint : public SimpleConstraint<PropertyNamesConstraint> {
  65. public:
  66. schema::Node const * key_schema;
  67. public:
  68. PropertyNamesConstraint(schema::Node const * key_schema) : key_schema(key_schema) {}
  69. };
  70. class RequiredConstraint : public SimpleConstraint<RequiredConstraint> {
  71. public:
  72. std::unordered_set<std::string> properties;
  73. public:
  74. RequiredConstraint(std::unordered_set<std::string> const & properties) : properties(properties) {}
  75. };
  76. class UnevaluatedPropertiesConstraint : public SimpleConstraint<UnevaluatedPropertiesConstraint> {
  77. public:
  78. schema::Node const * subschema;
  79. public:
  80. UnevaluatedPropertiesConstraint(schema::Node const * subschema) : subschema(subschema) {}
  81. };
  82. }