| 1234567891011121314151617181920212223242526272829303132333435 |
- #pragma once
- #include <variant>
- #include <jvalidate/constraint/visitor.h>
- #include <jvalidate/detail/pointer.h>
- #include <jvalidate/enum.h>
- #include <jvalidate/forward.h>
- #include <jvalidate/status.h>
- namespace jvalidate::constraint {
- class Constraint {
- public:
- using SubConstraint = std::variant<schema::Node const *, std::unique_ptr<Constraint>>;
- public:
- virtual ~Constraint() = default;
- virtual Status accept(ConstraintVisitor const & visitor) const = 0;
- };
- template <typename CRTP> class SimpleConstraint : public Constraint {
- public:
- Status accept(ConstraintVisitor const & visitor) const final {
- return visitor.visit(*static_cast<CRTP const *>(this));
- }
- };
- class ExtensionConstraint : public Constraint {
- public:
- Status accept(ConstraintVisitor const & visitor) const final { return visitor.visit(*this); }
- virtual Status validate(adapter::Adapter const & json, detail::Pointer const & where,
- ValidationResult * result) const = 0;
- };
- }
|