object_constraint.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. public:
  37. int64_t value;
  38. public:
  39. MaxPropertiesConstraint(int64_t value) : value(value) {}
  40. };
  41. class MinPropertiesConstraint : public SimpleConstraint<MinPropertiesConstraint> {
  42. public:
  43. int64_t value;
  44. public:
  45. MinPropertiesConstraint(int64_t value) : value(value) {}
  46. };
  47. class PatternPropertiesConstraint : public SimpleConstraint<PatternPropertiesConstraint> {
  48. public:
  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 SimpleConstraint<PropertiesConstraint> {
  56. public:
  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 SimpleConstraint<PropertyNamesConstraint> {
  63. public:
  64. schema::Node const * key_schema;
  65. public:
  66. PropertyNamesConstraint(schema::Node const * key_schema) : key_schema(key_schema) {}
  67. };
  68. class RequiredConstraint : public SimpleConstraint<RequiredConstraint> {
  69. public:
  70. std::unordered_set<std::string> properties;
  71. public:
  72. RequiredConstraint(std::unordered_set<std::string> const & properties) : properties(properties) {}
  73. };
  74. class UnevaluatedPropertiesConstraint : public SimpleConstraint<UnevaluatedPropertiesConstraint> {
  75. public:
  76. schema::Node const * subschema;
  77. public:
  78. UnevaluatedPropertiesConstraint(schema::Node const * subschema) : subschema(subschema) {}
  79. };
  80. }