xrpld
Loading...
Searching...
No Matches
require.h
1#pragma once
2
3#include <test/jtx/JTx.h>
4#include <test/jtx/requires.h>
5
6#include <functional>
7#include <vector>
8
9namespace xrpl {
10
11namespace detail {
12
13template <class Cond, class... Args>
14inline void
15requireArgs(test::jtx::requires_t& vec, Cond const& cond, Args const&... args)
16{
17 vec.push_back(cond);
18 if constexpr (sizeof...(args) > 0)
19 requireArgs(vec, args...);
20}
21
22} // namespace detail
23
24namespace test::jtx {
25
29template <class... Args>
31required(Args const&... args)
32{
33 requires_t vec;
34 detail::requireArgs(vec, args...);
35 return [vec](Env& env) {
36 for (auto const& f : vec)
37 f(env);
38 };
39}
40
49{
50private:
52
53public:
54 template <class... Args>
55 Require(Args const&... args) : cond_(required(args...))
56 {
57 }
58
59 void
60 operator()(Env&, JTx& jt) const
61 {
63 }
64};
65
66} // namespace test::jtx
67
68} // namespace xrpl
A transaction testing environment.
Definition Env.h:161
void operator()(Env &, JTx &jt) const
Definition require.h:60
Require(Args const &... args)
Definition require.h:55
T emplace_back(T... args)
void requireArgs(test::jtx::requires_t &vec, Cond const &cond, Args const &... args)
Definition require.h:15
require_t required(Args const &... args)
Compose many condition functors into one.
Definition require.h:31
std::vector< require_t > requires_t
Definition requires.h:11
std::function< void(Env &)> require_t
Definition requires.h:10
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
T push_back(T... args)
Execution context for applying a JSON transaction.
Definition JTx.h:27
requires_t require
Definition JTx.h:29