constraint.h 993 B

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