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