adapter.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #pragma once
  2. #include <cstdint>
  3. #include <map>
  4. #include <optional>
  5. #include <string_view>
  6. #include <jvalidate/detail/array_iterator.h>
  7. #include <jvalidate/detail/object_iterator.h>
  8. #include <jvalidate/enum.h>
  9. #include <jvalidate/forward.h>
  10. namespace jvalidate::adapter {
  11. class Adapter {
  12. public:
  13. virtual ~Adapter() = default;
  14. virtual Type type() const = 0;
  15. virtual std::unique_ptr<Const const> freeze() const = 0;
  16. virtual bool as_boolean() const = 0;
  17. virtual int64_t as_integer() const = 0;
  18. virtual double as_number() const = 0;
  19. virtual std::string as_string() const = 0;
  20. virtual bool apply_array(AdapterCallback const & cb) const = 0;
  21. virtual bool apply_object(ObjectAdapterCallback const & cb) const = 0;
  22. };
  23. class Const {
  24. public:
  25. virtual ~Const() = default;
  26. virtual bool apply(AdapterCallback const & cb) const = 0;
  27. };
  28. }
  29. namespace jvalidate::adapter::detail {
  30. template <typename JSON> class GenericConst final : public Const {
  31. public:
  32. explicit GenericConst(JSON const & value) : value_(value) {}
  33. bool apply(AdapterCallback const & cb) const {
  34. return cb(typename AdapterTraits<JSON>::ConstAdapter(value_));
  35. }
  36. private:
  37. JSON value_;
  38. };
  39. }