20#ifndef RIPPLE_JSON_MULTIAPIJSON_H_INCLUDED 
   21#define RIPPLE_JSON_MULTIAPIJSON_H_INCLUDED 
   23#include <xrpl/beast/utility/instrumentation.h> 
   24#include <xrpl/json/json_value.h> 
   25#include <xrpl/protocol/ApiVersion.h> 
   39template <
typename I, auto A>
 
   40constexpr bool is_integral_constant<std::integral_constant<I, A>&> = 
true;
 
   41template <
typename I, auto A>
 
   42constexpr bool is_integral_constant<std::integral_constant<I, A> 
const&> = 
true;
 
   53template <
unsigned MinVer, 
unsigned MaxVer>
 
   56    static_assert(MinVer <= MaxVer);
 
   59    valid(
unsigned int v) 
noexcept -> 
bool 
   61        return v >= MinVer && v <= MaxVer;
 
 
   67        return (v < MinVer) ? 0 : 
static_cast<std::size_t>(v - MinVer);
 
 
   82    set(
char const* key, 
auto const& v)
 
   85        for (
auto& a : this->
val)
 
 
   96        for (
auto& a : this->
val)
 
 
  108            unsigned int Version,
 
  117            Args&&... args) 
const 
  120                decltype(json.val[0]),
 
  128                json.val[
index(Version)],
 
 
  134        template <
typename Json, 
unsigned int Version, 
typename Fn>
 
  157        operator()(
Json& json, Version version, Fn fn, Args&&... args) 
const 
  159                invoke_result_t<Fn, decltype(json.
val[0]), Version, Args&&...>
 
  163                "ripple::detail::MultiApiJson::operator<Args...>() : valid " 
  167                json.val[
index(version)],
 
 
  173        template <
typename Json, 
typename Version, 
typename Fn>
 
  178        operator()(
Json& json, Version version, Fn fn) 
const 
  183                "ripple::detail::MultiApiJson::operator() : valid version");
 
 
 
  191        return [self = 
this](
auto... args)
 
 
  203        return [self = 
this](
auto... args)
 
 
  212    template <
typename... Args>
 
  216        requires(
sizeof...(args) > 0) &&
 
 
  222    template <
typename... Args>
 
  226        requires(
sizeof...(args) > 0) &&
 
 
 
  237    MultiApiJson<RPC::apiMinimumSupportedVersion, RPC::apiMaximumValidVersion>;
 
JSON (JavaScript Object Notation).
 
constexpr bool is_integral_constant
 
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
 
auto operator()(Json &json, std::integral_constant< unsigned int, Version > const version, Fn fn, Args &&... args) const -> std::invoke_result_t< Fn, decltype(json.val[0]), std::integral_constant< unsigned int, Version >, Args &&... >
 
auto operator()(Json &json, std::integral_constant< unsigned int, Version > const, Fn fn) const -> std::invoke_result_t< Fn, decltype(json.val[0])>
 
IsMemberResult isMember(char const *key) const
 
static constexpr std::size_t size
 
static constexpr struct ripple::detail::MultiApiJson::visitor_t visitor
 
static constexpr auto index(unsigned int v) noexcept -> std::size_t
 
auto visit(Args... args) -> std::invoke_result_t< visitor_t, MultiApiJson &, Args... > requires(sizeof...(args) > 0) &&
 
static constexpr auto valid(unsigned int v) noexcept -> bool
 
MultiApiJson(Json::Value const &init={})
 
auto visit(Args... args) const -> std::invoke_result_t< visitor_t, MultiApiJson const &, Args... > requires(sizeof...(args) > 0) &&
 
std::array< Json::Value, size > val
 
void set(char const *key, auto const &v)