3#include <xrpl/beast/utility/instrumentation.h>
4#include <xrpl/json/json_value.h>
5#include <xrpl/protocol/ApiVersion.h>
19template <
typename I, auto A>
21template <
typename I, auto A>
33template <
unsigned MinVer,
unsigned MaxVer>
36 static_assert(MinVer <= MaxVer);
39 valid(
unsigned int v)
noexcept ->
bool
41 return v >= MinVer && v <= MaxVer;
47 return (v < MinVer) ? 0 :
static_cast<std::size_t>(v - MinVer);
62 set(
char const* key,
auto const& v)
63 requires std::constructible_from<
json::Value,
decltype(v)>
65 for (
auto& a : this->val)
75 for (
auto& a : this->val)
89 template <
typename Json,
unsigned int Version,
typename... Args,
typename Fn>
90 requires std::same_as<std::remove_cvref_t<Json>,
MultiApiJson>
99 decltype(
json.val[0]),
108 template <
typename Json,
unsigned int Version,
typename Fn>
109 requires std::same_as<std::remove_cvref_t<Json>,
MultiApiJson>
119 template <
typename Json,
typename Version,
typename... Args,
typename Fn>
123 operator()(Json&
json, Version version, Fn fn, Args&&... args)
const
128 "xrpl::detail::MultiApijson::operator<Args...>() : valid "
134 template <
typename Json,
typename Version,
typename Fn>
138 operator()(Json&
json, Version version, Fn fn)
const
143 "xrpl::detail::MultiApijson::operator() : valid version");
151 return [self =
this](
auto... args)
161 return [self =
this](
auto... args)
168 template <
typename... Args>
171 requires(
sizeof...(args) > 0) &&
177 template <
typename... Args>
180 requires(
sizeof...(args) > 0) &&
JSON (JavaScript Object Notation).
constexpr bool kIsIntegralConstant
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
detail::MultiApiJson< RPC::kApiMinimumSupportedVersion, RPC::kApiMaximumValidVersion > MultiApiJson
auto operator()(Json &json, std::integral_constant< unsigned int, Version > const, Fn fn) const -> std::invoke_result_t< Fn, decltype(json.val[0])>
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 visit(Args... args) const -> std::invoke_result_t< VisitorT, MultiApiJson const &, Args... > requires(sizeof...(args) > 0) &&
void set(char const *key, auto const &v)
IsMemberResult isMember(char const *key) const
static constexpr struct xrpl::detail::MultiApiJson::VisitorT kVisitor
std::array< json::Value, kSize > val
static constexpr auto valid(unsigned int v) noexcept -> bool
static constexpr auto index(unsigned int v) noexcept -> std::size_t
auto visit(Args... args) -> std::invoke_result_t< VisitorT, MultiApiJson &, Args... > requires(sizeof...(args) > 0) &&
static constexpr std::size_t kSize
MultiApiJson(json::Value const &init={})