| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #pragma once
- #include <functional>
- #include <string>
- namespace jvalidate::adapter {
- enum class Type : int8_t;
- class Adapter;
- class Const;
- using AdapterCallback = std::function<bool(adapter::Adapter const &)>;
- using ObjectAdapterCallback = std::function<bool(std::string const &, adapter::Adapter const &)>;
- template <typename> struct AdapterTraits;
- template <typename V> struct AdapterTraits<V const> : AdapterTraits<V> {};
- template <typename JSON> using AdapterFor = typename AdapterTraits<JSON>::template Adapter<JSON>;
- }
- namespace jvalidate::constraint {
- class ConstraintVisitor;
- class Constraint;
- }
- namespace jvalidate::schema {
- enum class Version : int;
- class Node;
- }
- namespace jvalidate {
- template <typename A>
- concept ScalarAdapter = requires(A const a) {
- a.operator bool();
- a.operator int64_t();
- a.operator double();
- a.operator std::string();
- };
- template <typename It>
- concept ArrayIterator = std::forward_iterator<It> and std::is_default_constructible_v<It> and
- requires(It const it) {
- { *it } -> std::convertible_to<adapter::Adapter const &>;
- };
- template <typename It>
- concept ObjectIterator = std::forward_iterator<It> and std::is_default_constructible_v<It> and
- requires(It const it) {
- { it->first } -> std::convertible_to<std::string_view>;
- { it->second } -> std::convertible_to<adapter::Adapter const &>;
- };
- template <typename A>
- concept ArrayAdapter = requires(A const a) {
- { a.size() } -> std::convertible_to<std::size_t>;
- { a[0UL] } -> std::convertible_to<adapter::Adapter const &>;
- { a.begin() } -> ArrayIterator;
- { a.end() } -> ArrayIterator;
- };
- template <typename A>
- concept ObjectAdapter = requires(A const a) {
- { a.size() } -> std::convertible_to<std::size_t>;
- { a.contains("") } -> std::same_as<bool>;
- { a[""] } -> std::convertible_to<adapter::Adapter const &>;
- { a.begin() } -> ObjectIterator;
- { a.end() } -> ObjectIterator;
- };
- template <typename A>
- concept Adapter = std::is_base_of_v<adapter::Adapter, A> && requires(A a) {
- { a.as_object() } -> ObjectAdapter;
- { a.as_array() } -> ArrayAdapter;
- };
- }
- namespace jvalidate {
- class Result;
- class Schema;
- }
|