#pragma once #include #include #include #include #include #include #include #include namespace jvalidate::constraint { class AdditionalPropertiesConstraint : public SimpleConstraint { public: 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 SimpleConstraint { public: 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 SimpleConstraint { public: int64_t value; public: MaxPropertiesConstraint(int64_t value) : value(value) {} }; class MinPropertiesConstraint : public SimpleConstraint { public: int64_t value; public: MinPropertiesConstraint(int64_t value) : value(value) {} }; class PatternPropertiesConstraint : public SimpleConstraint { public: std::vector> properties; public: PatternPropertiesConstraint( std::vector> const & properties) : properties(properties) {} }; class PropertiesConstraint : public SimpleConstraint { public: std::map properties; public: PropertiesConstraint(std::map const & properties) : properties(properties) {} }; class PropertyNamesConstraint : public SimpleConstraint { public: schema::Node const * key_schema; public: PropertyNamesConstraint(schema::Node const * key_schema) : key_schema(key_schema) {} }; class RequiredConstraint : public SimpleConstraint { public: std::unordered_set properties; public: RequiredConstraint(std::unordered_set const & properties) : properties(properties) {} }; class UnevaluatedPropertiesConstraint : public SimpleConstraint { public: schema::Node const * subschema; public: UnevaluatedPropertiesConstraint(schema::Node const * subschema) : subschema(subschema) {} }; }