constraint.h 875 B

123456789101112131415161718192021222324252627282930
  1. #pragma once
  2. #include <jvalidate/constraint/visitor.h>
  3. #include <jvalidate/detail/pointer.h>
  4. #include <jvalidate/enum.h>
  5. #include <jvalidate/forward.h>
  6. #include <jvalidate/status.h>
  7. namespace jvalidate::constraint {
  8. class Constraint {
  9. public:
  10. virtual ~Constraint() = default;
  11. virtual Status accept(ConstraintVisitor const & visitor) const = 0;
  12. };
  13. template <typename CRTP> class SimpleConstraint : public Constraint {
  14. public:
  15. Status accept(ConstraintVisitor const & visitor) const final {
  16. return visitor.visit(*static_cast<CRTP const *>(this));
  17. }
  18. };
  19. class ExtensionConstraint : public Constraint {
  20. public:
  21. Status accept(ConstraintVisitor const & visitor) const final { return visitor.visit(*this); }
  22. virtual Status validate(adapter::Adapter const & json, detail::Pointer const & where,
  23. ValidationResult * result) const = 0;
  24. };
  25. }