#pragma once #include #include #include #include #include #include #include #include namespace jvalidate::constraint { class AdditionalPropertiesConstraint : public Constraint { private: schema::Node const * subschema_; std::unordered_set properties_; std::vector patterns_; public: AdditionalPropertiesConstraint(schema::Node const * subschema, std::unordered_set const & properties, std::vector const & patterns) : subschema_(subschema), properties_(properties), patterns_(patterns) {} }; class DependenciesConstraint : public Constraint { private: std::map subschemas_; std::map> required_; public: DependenciesConstraint(std::map const & subschemas) : subschemas_(subschemas) {} DependenciesConstraint(std::map> const & required) : required_(required) {} DependenciesConstraint(std::map const & subschemas, std::map> const & required) : subschemas_(subschemas), required_(required) {} }; class MaxPropertiesConstraint : public Constraint { private: int64_t value_; public: MaxPropertiesConstraint(int64_t value) : value_(value) {} }; class MinPropertiesConstraint : public Constraint { private: int64_t value_; public: MinPropertiesConstraint(int64_t value) : value_(value) {} }; class PatternPropertiesConstraint : public Constraint { private: std::vector> properties_; public: PatternPropertiesConstraint( std::vector> const & properties) : properties_(properties) {} }; class PropertiesConstraint : public Constraint { private: std::map properties_; public: PropertiesConstraint(std::map const & properties) : properties_(properties) {} }; class PropertyNamesConstraint : public Constraint { private: schema::Node const * key_schema_; public: PropertyNamesConstraint(schema::Node const * key_schema) : key_schema_(key_schema) {} }; class RequiredConstraint : public Constraint { private: std::unordered_set properties_; public: RequiredConstraint(std::unordered_set const & properties) : properties_(properties) {} }; class UnevaluatedPropertiesConstraint : public Constraint { private: schema::Node const * subschema_; public: UnevaluatedPropertiesConstraint(schema::Node const * subschema) : subschema_(subschema) {} }; }