adapter.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. #include <jvalidate/status.h>
  11. namespace jvalidate::adapter {
  12. class Adapter {
  13. public:
  14. virtual ~Adapter() = default;
  15. virtual Type type() const = 0;
  16. virtual std::unique_ptr<Const const> freeze() const = 0;
  17. virtual bool as_boolean() const = 0;
  18. virtual int64_t as_integer() const = 0;
  19. virtual double as_number() const = 0;
  20. virtual std::string as_string() const = 0;
  21. virtual size_t array_size() const = 0;
  22. virtual size_t object_size() const = 0;
  23. virtual Status apply_array(AdapterCallback const & cb) const = 0;
  24. virtual Status apply_object(ObjectAdapterCallback const & cb) const = 0;
  25. virtual bool equals(Adapter const & lhs, bool strict) const = 0;
  26. };
  27. class Const {
  28. public:
  29. virtual ~Const() = default;
  30. virtual Status apply(AdapterCallback const & cb) const = 0;
  31. };
  32. }
  33. namespace jvalidate::adapter::detail {
  34. template <typename JSON> class GenericConst final : public Const {
  35. public:
  36. explicit GenericConst(JSON const & value) : value_(value) {}
  37. Status apply(AdapterCallback const & cb) const {
  38. return cb(typename AdapterTraits<JSON>::ConstAdapter(value_));
  39. }
  40. private:
  41. JSON value_;
  42. };
  43. }