#pragma once #include namespace jvalidate::constraint { struct ConstraintVisitor { virtual ~ConstraintVisitor() = default; virtual Status visit(ExtensionConstraint const &) const = 0; virtual Status visit(TypeConstraint const &) const = 0; virtual Status visit(EnumConstraint const &) const = 0; virtual Status visit(AllOfConstraint const &) const = 0; virtual Status visit(AnyOfConstraint const &) const = 0; virtual Status visit(OneOfConstraint const &) const = 0; virtual Status visit(NotConstraint const &) const = 0; virtual Status visit(ConditionalConstraint const &) const = 0; virtual Status visit(MaximumConstraint const &) const = 0; virtual Status visit(MinimumConstraint const &) const = 0; virtual Status visit(MultipleOfConstraint const &) const = 0; virtual Status visit(MaxLengthConstraint const &) const = 0; virtual Status visit(MinLengthConstraint const &) const = 0; virtual Status visit(PatternConstraint const &) const = 0; virtual Status visit(AdditionalItemsConstraint const &) const = 0; virtual Status visit(ContainsConstraint const &) const = 0; virtual Status visit(MaxItemsConstraint const &) const = 0; virtual Status visit(MinItemsConstraint const &) const = 0; virtual Status visit(TupleConstraint const &) const = 0; virtual Status visit(UniqueItemsConstraint const &) const = 0; virtual Status visit(AdditionalPropertiesConstraint const &) const = 0; virtual Status visit(DependenciesConstraint const &) const = 0; virtual Status visit(MaxPropertiesConstraint const &) const = 0; virtual Status visit(MinPropertiesConstraint const &) const = 0; virtual Status visit(PatternPropertiesConstraint const &) const = 0; virtual Status visit(PropertiesConstraint const &) const = 0; virtual Status visit(PropertyNamesConstraint const &) const = 0; virtual Status visit(RequiredConstraint const &) const = 0; virtual Status visit(UnevaluatedItemsConstraint const &) const = 0; virtual Status visit(UnevaluatedPropertiesConstraint const &) const = 0; }; template struct ExtensionConstraintVisitor { virtual Status visit(Cons const &) const = 0; }; }