constraint.h 835 B

1234567891011121314151617181920212223242526272829
  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. namespace jvalidate::constraint {
  7. class Constraint {
  8. public:
  9. virtual ~Constraint() = default;
  10. virtual Status accept(ConstraintVisitor const & visitor) const = 0;
  11. };
  12. template <typename CRTP> class SimpleConstraint : public Constraint {
  13. public:
  14. Status accept(ConstraintVisitor const & visitor) const final {
  15. return visitor.visit(*static_cast<CRTP const *>(this));
  16. }
  17. };
  18. class ExtensionConstraint : public Constraint {
  19. public:
  20. Status accept(ConstraintVisitor const & visitor) const final { return visitor.visit(*this); }
  21. virtual Status validate(adapter::Adapter const & json, detail::Pointer const & where,
  22. Result * result) const = 0;
  23. };
  24. }