extension_constraint.h 565 B

12345678910111213141516171819202122232425
  1. #pragma once
  2. #include <memory>
  3. #include <jvalidate/forward.h>
  4. #include <jvalidate/status.h>
  5. namespace jvalidate::constraint {
  6. class ExtensionConstraint {
  7. public:
  8. struct Impl {
  9. virtual ~Impl() = default;
  10. virtual Status visit(extension::VisitorBase const &) const = 0;
  11. };
  12. public:
  13. template <typename T, typename... Args> static std::unique_ptr<Constraint> make(Args &&... args) {
  14. return std::make_unique<Constraint>(
  15. ExtensionConstraint{std::make_unique<T>(std::forward<Args>(args)...)});
  16. }
  17. public:
  18. std::unique_ptr<Impl> pimpl;
  19. };
  20. }